|
|
|
@ -36,6 +36,9 @@ END_CERT="-----END CERTIFICATE-----"
|
|
|
|
|
|
|
|
|
|
RENEW_SKIP=2
|
|
|
|
|
|
|
|
|
|
ECC_SEP="_"
|
|
|
|
|
ECC_SUFFIX="${ECC_SEP}ecc"
|
|
|
|
|
|
|
|
|
|
if [ -z "$AGREEMENT" ] ; then
|
|
|
|
|
AGREEMENT="$DEFAULT_AGREEMENT"
|
|
|
|
|
fi
|
|
|
|
@ -89,10 +92,16 @@ _startswith(){
|
|
|
|
|
echo "$_str" | grep "^$_sub" >/dev/null 2>&1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_endswith(){
|
|
|
|
|
_str="$1"
|
|
|
|
|
_sub="$2"
|
|
|
|
|
echo "$_str" | grep -- "$_sub\$" >/dev/null 2>&1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_contains(){
|
|
|
|
|
_str="$1"
|
|
|
|
|
_sub="$2"
|
|
|
|
|
echo "$_str" | grep "$_sub" >/dev/null 2>&1
|
|
|
|
|
echo "$_str" | grep -- "$_sub" >/dev/null 2>&1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_hasfield() {
|
|
|
|
@ -321,27 +330,25 @@ _sign() {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#keylength
|
|
|
|
|
_isEccKey() {
|
|
|
|
|
_length="$1"
|
|
|
|
|
|
|
|
|
|
[ "$_length" != "1024" ] \
|
|
|
|
|
&& [ "$_length" != "2048" ] \
|
|
|
|
|
&& [ "$_length" != "3172" ] \
|
|
|
|
|
&& [ "$_length" != "4096" ] \
|
|
|
|
|
&& [ "$_length" != "8192" ]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# _createkey 2048|ec-256 file
|
|
|
|
|
_createkey() {
|
|
|
|
|
length="$1"
|
|
|
|
|
f="$2"
|
|
|
|
|
isec=""
|
|
|
|
|
eccname="$length"
|
|
|
|
|
if _startswith "$length" "ec-" ; then
|
|
|
|
|
isec="1"
|
|
|
|
|
length=$(printf $length | cut -d '-' -f 2-100)
|
|
|
|
|
eccname="$length"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [ -z "$length" ] ; then
|
|
|
|
|
if [ "$isec" ] ; then
|
|
|
|
|
length=256
|
|
|
|
|
else
|
|
|
|
|
length=2048
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
_info "Use length $length"
|
|
|
|
|
|
|
|
|
|
if [ "$isec" ] ; then
|
|
|
|
|
if [ "$length" = "256" ] ; then
|
|
|
|
|
eccname="prime256v1"
|
|
|
|
|
fi
|
|
|
|
@ -351,15 +358,28 @@ _createkey() {
|
|
|
|
|
if [ "$length" = "521" ] ; then
|
|
|
|
|
eccname="secp521r1"
|
|
|
|
|
fi
|
|
|
|
|
_info "Using ec name: $eccname"
|
|
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [ -z "$length" ] ; then
|
|
|
|
|
length=2048
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
_info "Use length $length"
|
|
|
|
|
|
|
|
|
|
#generate account key
|
|
|
|
|
if [ "$isec" ] ; then
|
|
|
|
|
if _isEccKey "$length" ; then
|
|
|
|
|
_info "Using ec name: $eccname"
|
|
|
|
|
openssl ecparam -name $eccname -genkey 2>/dev/null > "$f"
|
|
|
|
|
else
|
|
|
|
|
_info "Using RSA: $length"
|
|
|
|
|
openssl genrsa $length 2>/dev/null > "$f"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [ "$?" != "0" ] ; then
|
|
|
|
|
_err "Create key error."
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#_createcsr cn san_list keyfile csrfile conf
|
|
|
|
@ -434,6 +454,7 @@ _ss() {
|
|
|
|
|
return 1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#domain [password] [isEcc]
|
|
|
|
|
toPkcs() {
|
|
|
|
|
domain="$1"
|
|
|
|
|
pfxPassword="$2"
|
|
|
|
@ -442,8 +463,10 @@ toPkcs() {
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
_initpath "$domain"
|
|
|
|
|
_isEcc="$3"
|
|
|
|
|
|
|
|
|
|
_initpath "$domain" "$_isEcc"
|
|
|
|
|
|
|
|
|
|
if [ "$pfxPassword" ] ; then
|
|
|
|
|
openssl pkcs12 -export -out "$CERT_PFX_PATH" -inkey "$CERT_KEY_PATH" -in "$CERT_PATH" -certfile "$CA_CERT_PATH" -password "pass:$pfxPassword"
|
|
|
|
|
else
|
|
|
|
@ -488,7 +511,7 @@ createAccountKey() {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#domain length
|
|
|
|
|
#domain [length]
|
|
|
|
|
createDomainKey() {
|
|
|
|
|
_info "Creating domain key"
|
|
|
|
|
if [ -z "$1" ] ; then
|
|
|
|
@ -497,9 +520,9 @@ createDomainKey() {
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
domain=$1
|
|
|
|
|
_initpath $domain
|
|
|
|
|
|
|
|
|
|
length=$2
|
|
|
|
|
|
|
|
|
|
_initpath $domain "$length"
|
|
|
|
|
|
|
|
|
|
if [ ! -f "$CERT_KEY_PATH" ] || ( [ "$FORCE" ] && ! [ "$IS_RENEW" ] ); then
|
|
|
|
|
_createkey "$length" "$CERT_KEY_PATH"
|
|
|
|
@ -516,23 +539,30 @@ createDomainKey() {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# domain domainlist
|
|
|
|
|
# domain domainlist isEcc
|
|
|
|
|
createCSR() {
|
|
|
|
|
_info "Creating csr"
|
|
|
|
|
if [ -z "$1" ] ; then
|
|
|
|
|
echo "Usage: $PROJECT_ENTRY --createCSR -d domain1.com [-d domain2.com -d domain3.com ... ]"
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
domain=$1
|
|
|
|
|
_initpath "$domain"
|
|
|
|
|
|
|
|
|
|
domainlist=$2
|
|
|
|
|
domain="$1"
|
|
|
|
|
domainlist="$2"
|
|
|
|
|
_isEcc="$3"
|
|
|
|
|
|
|
|
|
|
_initpath "$domain" "$_isEcc"
|
|
|
|
|
|
|
|
|
|
if [ -f "$CSR_PATH" ] && [ "$IS_RENEW" ] && [ -z "$FORCE" ]; then
|
|
|
|
|
_info "CSR exists, skip"
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [ ! -f "$CERT_KEY_PATH" ] ; then
|
|
|
|
|
_err "The key file is not found: $CERT_KEY_PATH"
|
|
|
|
|
_err "Please create the key file first."
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
_createcsr "$domain" "$domainlist" "$CERT_KEY_PATH" "$CSR_PATH" "$DOMAIN_SSL_CONF"
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
@ -1012,6 +1042,7 @@ _starttlsserver() {
|
|
|
|
|
_debug serverproc $serverproc
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[domain] [keylength]
|
|
|
|
|
_initpath() {
|
|
|
|
|
|
|
|
|
|
if [ -z "$LE_WORKING_DIR" ] ; then
|
|
|
|
@ -1091,12 +1122,16 @@ _initpath() {
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
domain="$1"
|
|
|
|
|
|
|
|
|
|
length="$2"
|
|
|
|
|
if [ -z "$domain" ] ; then
|
|
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
domainhome="$CERT_HOME/$domain"
|
|
|
|
|
if _isEccKey "$length" ; then
|
|
|
|
|
domainhome="$CERT_HOME/$domain$ECC_SUFFIX"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
mkdir -p "$domainhome"
|
|
|
|
|
|
|
|
|
|
if [ -z "$DOMAIN_PATH" ] ; then
|
|
|
|
@ -1350,7 +1385,9 @@ issue() {
|
|
|
|
|
Le_Webroot="dns_cx"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
_initpath $Le_Domain
|
|
|
|
|
if [ ! "$IS_RENEW" ] ; then
|
|
|
|
|
_initpath $Le_Domain "$Le_Keylength"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [ -f "$DOMAIN_CONF" ] ; then
|
|
|
|
|
Le_NextRenewTime=$(_readdomainconf Le_NextRenewTime)
|
|
|
|
@ -1482,7 +1519,7 @@ issue() {
|
|
|
|
|
_savedomainconf "Le_Keylength" "$Le_Keylength"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ! createCSR $Le_Domain $Le_Alt ; then
|
|
|
|
|
if ! _createcsr "$Le_Domain" "$Le_Alt" "$CERT_KEY_PATH" "$CSR_PATH" "$DOMAIN_SSL_CONF" ; then
|
|
|
|
|
_err "Create CSR error."
|
|
|
|
|
_clearup
|
|
|
|
|
return 1
|
|
|
|
@ -1923,6 +1960,7 @@ issue() {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#domain [isEcc]
|
|
|
|
|
renew() {
|
|
|
|
|
Le_Domain="$1"
|
|
|
|
|
if [ -z "$Le_Domain" ] ; then
|
|
|
|
@ -1930,7 +1968,10 @@ renew() {
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
_initpath $Le_Domain
|
|
|
|
|
_isEcc="$2"
|
|
|
|
|
|
|
|
|
|
_initpath $Le_Domain "$_isEcc"
|
|
|
|
|
|
|
|
|
|
_info "Renew: $Le_Domain"
|
|
|
|
|
if [ ! -f "$DOMAIN_CONF" ] ; then
|
|
|
|
|
_info "$Le_Domain is not a issued domain, skip."
|
|
|
|
@ -1961,10 +2002,15 @@ renewAll() {
|
|
|
|
|
_stopRenewOnError="$1"
|
|
|
|
|
_debug "_stopRenewOnError" "$_stopRenewOnError"
|
|
|
|
|
_ret="0"
|
|
|
|
|
|
|
|
|
|
for d in $(ls -F ${CERT_HOME}/ | grep [^.].*[.].*/$ ) ; do
|
|
|
|
|
d=$(echo $d | cut -d '/' -f 1)
|
|
|
|
|
(
|
|
|
|
|
renew "$d"
|
|
|
|
|
(
|
|
|
|
|
if _endswith $d "$ECC_SUFFIX" ; then
|
|
|
|
|
_isEcc=$(echo $d | cut -d "$ECC_SEP" -f 2)
|
|
|
|
|
d=$(echo $d | cut -d "$ECC_SEP" -f 1)
|
|
|
|
|
fi
|
|
|
|
|
renew "$d" "$_isEcc"
|
|
|
|
|
)
|
|
|
|
|
rc="$?"
|
|
|
|
|
_debug "Return code: $rc"
|
|
|
|
@ -1990,14 +2036,18 @@ list() {
|
|
|
|
|
|
|
|
|
|
_sep="|"
|
|
|
|
|
if [ "$_raw" ] ; then
|
|
|
|
|
printf "Main_Domain${_sep}SAN_Domains${_sep}Created${_sep}Renew\n"
|
|
|
|
|
printf "Main_Domain${_sep}KeyLength${_sep}SAN_Domains${_sep}Created${_sep}Renew\n"
|
|
|
|
|
for d in $(ls -F ${CERT_HOME}/ | grep [^.].*[.].*/$ ) ; do
|
|
|
|
|
d=$(echo $d | cut -d '/' -f 1)
|
|
|
|
|
(
|
|
|
|
|
_initpath $d
|
|
|
|
|
if _endswith $d "$ECC_SUFFIX" ; then
|
|
|
|
|
_isEcc=$(echo $d | cut -d "$ECC_SEP" -f 2)
|
|
|
|
|
d=$(echo $d | cut -d "$ECC_SEP" -f 1)
|
|
|
|
|
fi
|
|
|
|
|
_initpath $d "$_isEcc"
|
|
|
|
|
if [ -f "$DOMAIN_CONF" ] ; then
|
|
|
|
|
. "$DOMAIN_CONF"
|
|
|
|
|
printf "$Le_Domain${_sep}$Le_Alt${_sep}$Le_CertCreateTimeStr${_sep}$Le_NextRenewTimeStr\n"
|
|
|
|
|
printf "$Le_Domain${_sep}\"$Le_Keylength\"${_sep}$Le_Alt${_sep}$Le_CertCreateTimeStr${_sep}$Le_NextRenewTimeStr\n"
|
|
|
|
|
fi
|
|
|
|
|
)
|
|
|
|
|
done
|
|
|
|
@ -2005,7 +2055,7 @@ list() {
|
|
|
|
|
if _exists column ; then
|
|
|
|
|
list "raw" | column -t -s "$_sep"
|
|
|
|
|
else
|
|
|
|
|
list "raw" | tr '|' '\t'
|
|
|
|
|
list "raw" | tr "$_sep" '\t'
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
@ -2024,8 +2074,10 @@ installcert() {
|
|
|
|
|
Le_RealCACertPath="$4"
|
|
|
|
|
Le_ReloadCmd="$5"
|
|
|
|
|
Le_RealFullChainPath="$6"
|
|
|
|
|
|
|
|
|
|
_initpath $Le_Domain
|
|
|
|
|
_isEcc="$7"
|
|
|
|
|
if [ ! "$IS_RENEW" ] ; then
|
|
|
|
|
_initpath $Le_Domain "$_isEcc"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
_savedomainconf "Le_RealCertPath" "$Le_RealCertPath"
|
|
|
|
|
_savedomainconf "Le_RealCACertPath" "$Le_RealCACertPath"
|
|
|
|
@ -2162,7 +2214,9 @@ revoke() {
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
_initpath $Le_Domain
|
|
|
|
|
_isEcc="$2"
|
|
|
|
|
|
|
|
|
|
_initpath $Le_Domain "$_isEcc"
|
|
|
|
|
if [ ! -f "$DOMAIN_CONF" ] ; then
|
|
|
|
|
_err "$Le_Domain is not a issued domain, skip."
|
|
|
|
|
return 1;
|
|
|
|
|