Скрипт генерации ssl сертификатов и ключей для nginx:

#!/bin/sh

error() {
    echo 'ERROR detected! Exiting...'
    exit 1
}

#################################################
DOMAIN='domain.com'
EMAIL='admin@domain.com'
ORGANISATION='Organisation'
CITY='you city'
RSA_BIT=2048
DAYS=99365
#################################################

# Генерируем пароль для ключей.
PASS=$(tr -cd A-Za-z < /dev/urandom | head -c8)
echo 'Generated Password: '${PASS}

# Проверим, если не существует каталог для домена, то создаем его.
[ ! -d ${DOMAIN} ] && mkdir ${DOMAIN} && echo 'Create directory: '${DOMAIN}

# http://linuxcmd.ru/openssl-genrsa-sozdanie-fayla-klyuchey
echo "Now create the server private key, you'll be asked for a passphrase:"
openssl genrsa -des3 -out ${DOMAIN}/${DOMAIN}.key -passout pass:${PASS} ${RSA_BIT}
[ $? -eq 1 ] && error

# http://linuxcmd.ru/openssl-req-sozdanie-csr-zaprosa
# В пункте Common Name (eg, YOUR name) []: надо указать именно имя домена (без http, https, /): имя.домена
echo 'Create the Certificate Signing Request (CSR):'
openssl req -out ${DOMAIN}/${DOMAIN}.csr -new -newkey rsa:${RSA_BIT} \
    -subj /C=RU/ST=${CITY}/L=${CITY}/O=${ORGANISATION}/OU=${ORGANISATION}/CN=*.${DOMAIN}/emailAddress=${EMAIL} \
    -nodes -keyout ${DOMAIN}/${DOMAIN}.key -passout pass:${PASS}
[ $? -eq 1 ] && error

# Starting up nginx with SSL using the above private key:
echo 'Remove the necessity of entering a passphrase for:'
cp ${DOMAIN}/${DOMAIN}.key ${DOMAIN}/${DOMAIN}.key.org
openssl rsa -in ${DOMAIN}/${DOMAIN}.key.org -out ${DOMAIN}/${DOMAIN}.key
[ $? -eq 1 ] && error

echo 'Finally sign the certificate using the above private key and CSR:'
openssl x509 -req -days ${DAYS} -in ${DOMAIN}/${DOMAIN}.csr -signkey ${DOMAIN}/${DOMAIN}.key -out ${DOMAIN}/${DOMAIN}.crt
[ $? -eq 1 ] && error


# http://wiki.nginx.org/HttpSslModule
cat <<_EOF
# Update Nginx configuration by including the newly signed certificate and private key:
server {
    listen 443;
    server_name YOUR_DOMAINNAME_HERE;

    ssl on;
    ssl_certificate /usr/local/nginx/conf/server.crt;
    ssl_certificate_key /usr/local/nginx/conf/server.key;
}
_EOF

#Убедиться в том, что сервер присылает полную цепочку сертификатов,
#можно при помощи утилиты командной строки openssl, например:
#openssl s_client -connect www.godaddy.com:443

Ссылки по теме:

  1. openssl req - создание CSR-запроса
  2. openssl genrsa - создание файла ключей

Comments

comments powered by Disqus