SSL: SHA256, RSA2048, wildcards

Oct 26, 2014 15:01


Полностью автоматизированное (не диалоговое) создание современных стойких самоподписанных CA и сертификатов для доменов с поддержкой субдоменов (заметки на память).
  • Создаём CA.

    days=3650
    sign="sha256"
    encrypt="-newkey rsa:2048"
    pass='pass:1234567890'
    cnf=/etc/ssl/openssl.cnf

    umask 077
    mkdir CA
    cd CA
    mkdir certs crl newcerts private
    echo "01" > serial
    touch index.txt

    answers() {
    cat < pass

  • Создаем сертификат для веб-домена domain.name (опционально с поддержкой субдоменов *.domain.name), в скрипт передаём имя домена, контактный e-mail и название организации для создаваемого сертификата.

    wildcard="no"
    days=3650
    cnf=/etc/ssl/openssl.cnf
    sign="sha256"
    encrypt="-newkey rsa:2048"
    name="$1"
    email="$2"
    org="$3"
    outdir="certs"

    cd CA
    read pass < pass
    answers() {
    local cname="$name"
    [ "$wildcard" = yes ] && cname="*.$name"
    cat < $extcnf

    # Создаем приватный ключ и шаблон сертификата
    filename="$outdir/$name"
    answers | openssl req -nodes -new -x509 -$sign $encrypt \
    -keyout $filename.pem -out $filename.pem -days $days \
    -config "$extcnf" -reqexts $ename

    # Конвертируем шаблон в запрос сертификата
    openssl x509 -x509toreq -in $filename.pem -$sign -signkey $filename.pem \
    -extensions $ename -extfile "$extcnf" -out request-$$.pem

    # Подписываем запрос с помощью CA
    printf "y\ny\n" | openssl ca -passin "$pass" -config "$extcnf" \
    -days $days -extensions $ename -extfile "$extcnf" -md $sign \
    -policy policy_anything -out $filename-cert.pem -infiles request-$$.pem

    # Сохраняем приватный ключ
    openssl rsa -in $filename.pem -out $filename-key.pem

    # Создаем файл сертификата для веб-сервера
    openssl x509 -in $filename-cert.pem | cat - $filename-key.pem > $filename.crt

    # Не нужны больше
    rm -f request-$$.pem $extcnf $filename.pem


В качестве упражнения оставлены контроль ошибок и использование mktemp вместо $$.

ssl, security, openssl, закладка

Previous post Next post
Up