LetsEncrypt support for IDN domains

This commit is contained in:
Serghey Rodin 2017-12-04 19:34:34 +02:00
commit cd21b31405
4 changed files with 20 additions and 19 deletions

View file

@ -26,6 +26,9 @@ source $VESTA/func/main.sh
source $VESTA/func/domain.sh source $VESTA/func/domain.sh
source $VESTA/conf/vesta.conf source $VESTA/conf/vesta.conf
# Additional argument formatting
format_domain_idn
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #

View file

@ -11,8 +11,7 @@
# Argument definition # Argument definition
user=$1 user=$1
domain=$(idn -t --quiet -u "$2" ) domain=$2
domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
# Includes # Includes
source $VESTA/func/main.sh source $VESTA/func/main.sh
@ -23,6 +22,9 @@ encode_base64() {
cat |base64 |tr '+/' '-_' |tr -d '\r\n=' cat |base64 |tr '+/' '-_' |tr -d '\r\n='
} }
# Additional argument formatting
format_domain_idn
#----------------------------------------------------------# #----------------------------------------------------------#
# Verifications # # Verifications #
@ -64,7 +66,7 @@ protected=$(echo -n '{"nonce":"'"$nonce"'"}' |encode_base64)
# Defining ACME query (request challenge) # Defining ACME query (request challenge)
query='{"resource":"new-authz","identifier"' query='{"resource":"new-authz","identifier"'
query=$query':{"type":"dns","value":"'"$domain"'"}}' query=$query':{"type":"dns","value":"'"$domain_idn"'"}}'
payload=$(echo -n "$query" |encode_base64) payload=$(echo -n "$query" |encode_base64)
signature=$(printf "%s" "$protected.$payload" |\ signature=$(printf "%s" "$protected.$payload" |\
openssl dgst -sha256 -binary -sign "$key" |encode_base64) openssl dgst -sha256 -binary -sign "$key" |encode_base64)

View file

@ -54,6 +54,11 @@ shell_list_ssl() {
echo -e "\nDirectory: $workdir" echo -e "\nDirectory: $workdir"
} }
# Additional argument formatting
format_domain_idn
if [[ "$email" = *[![:ascii:]]* ]]; then
email=$(idn -t --quiet -a $email)
fi
#----------------------------------------------------------# #----------------------------------------------------------#
@ -69,15 +74,6 @@ is_format_valid 'domain_alias' 'format'
# Action # # Action #
#----------------------------------------------------------# #----------------------------------------------------------#
if [[ "$domain" = *[![:ascii:]]* ]]; then
domain_idn=$(idn -t --quiet -a $domain)
else
domain_idn=$domain
fi
if [[ "$email" = *[![:ascii:]]* ]]; then
email=$(idn -t --quiet -a $email)
fi
# Create temporary work directory # Create temporary work directory
workdir=$(mktemp -d) workdir=$(mktemp -d)
cd $workdir cd $workdir
@ -98,10 +94,12 @@ if [ -z "$aliases" ]; then
-out $domain.csr #>/dev/null 2>&1 -out $domain.csr #>/dev/null 2>&1
else else
for alias in $(echo $domain,$aliases |tr ',' '\n' |sort -u); do for alias in $(echo $domain,$aliases |tr ',' '\n' |sort -u); do
if [[ "$alias" = *[![:ascii:]]* ]]; then
alias=$(idn -t --quiet -a $alias)
fi
dns_aliases="${dns_aliases}DNS:$alias," dns_aliases="${dns_aliases}DNS:$alias,"
done done
dns_aliases=$(echo $dns_aliases |sed "s/,$//") dns_aliases=$(echo $dns_aliases |sed "s/,$//")
if [ -e "/etc/ssl/openssl.cnf" ]; then if [ -e "/etc/ssl/openssl.cnf" ]; then
ssl_conf='/etc/ssl/openssl.cnf' ssl_conf='/etc/ssl/openssl.cnf'
else else
@ -129,15 +127,15 @@ openssl x509 -req -sha256 \
# Listing certificates # Listing certificates
if [ -e "$domain.crt" ]; then if [ -e "$domain.crt" ]; then
crt=$(cat $domain.crt | sed ':a;N;$!ba;s/\n/\\n/g' ) crt=$(cat $domain.crt |sed ':a;N;$!ba;s/\n/\\n/g' )
fi fi
if [ -e "$domain.key" ]; then if [ -e "$domain.key" ]; then
key=$(cat $domain.key | sed ':a;N;$!ba;s/\n/\\n/g' ) key=$(cat $domain.key |sed ':a;N;$!ba;s/\n/\\n/g' )
fi fi
if [ -e "$domain.csr" ]; then if [ -e "$domain.csr" ]; then
csr=$(cat $domain.csr | sed ':a;N;$!ba;s/\n/\\n/g' ) csr=$(cat $domain.csr |sed ':a;N;$!ba;s/\n/\\n/g' )
fi fi
case $format in case $format in

View file

@ -11,8 +11,7 @@
# Argument definition # Argument definition
user=$1 user=$1
domain=$(idn -t --quiet -u "$2" ) domain=$2
domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
csr="$3/$domain.csr" csr="$3/$domain.csr"
format=$4 format=$4
@ -53,7 +52,6 @@ fi
source $USER_DATA/ssl/le.conf source $USER_DATA/ssl/le.conf
api='https://acme-v01.api.letsencrypt.org' api='https://acme-v01.api.letsencrypt.org'
r_domain=$(echo "$check_domain" |cut -f 2 -d \')
key="$USER_DATA/ssl/user.key" key="$USER_DATA/ssl/user.key"
exponent="$EXPONENT" exponent="$EXPONENT"
modulus="$MODULUS" modulus="$MODULUS"