Перенос SSL-сертификата на новый сервер

Мы переключаемся с веб-сайта OSCommerce на Magento и также являемся серверами обмена. Старый сервер находится на Apache, а наш новый на NGINX. SSL-сертификат, который у нас есть, кажется, был приобретен у GODADDY.

Я почти понял, как переключить наш сертификат SSL со старого сервера на наш новый. Но есть несколько вопросов?

1. REKEY СЕРТИФИКАТ

Я обнаружил три типа файлов SSL со старого виртуального хоста Apache сайта OSCommerce:

SSLCertificateFile /etc/apache2/ssl/11-2013/09********ss.crt
SSLCertificateKeyFile /etc/apache2/ssl/11-2013/server.key
SSLCertificateChainFile /etc/apache2/ssl/11-2013/gd_bundle.crt

Могу ли я просто скопировать их в папку на новом сервере и сослаться на них в файле конфигурации NGINX? Или мне нужно сгенерировать новый ключ ssl, повторно ввести файл crt (какой)?

2. КОНФИГУРАЦИЯ NGINX Конфигурация NGINX требует ссылки только на два файла, которые использует Apache?

# Specify path to your SSL certificates.
#ssl_certificate /etc/nginx/certificates/yourcertificate.crt;
#ssl_certificate_key /etc/nginx/certificates/yourcertificate.key;

На какой файл CRT я должен ссылаться для NGINX, а как на счет другого?

3. SSL 3.0 и SHA1. Когда я проверяю наш сайт на контроллере SSL DigiCert, он говорит:

Поддержка протокола

TLS 1.0, SSL 3.0

SSL 3.0 является устаревшей версией протокола с известными уязвимостями.

Сертификат SSL

Общее имя = ourdomain.com

Альтернативные имена субъектов = ourdomain.com, www.ourdomain.com

Эмитент = Go Daddy Secure Certification Authority

Серийный номер = *****************

Отпечаток SHA1 = ***************************

Длина ключа = 4096 бит

Алгоритм подписи = SHA1 + RSA (не рекомендуется)

Безопасное повторное согласование: поддерживается

Как я могу убедиться, что мы используем правильный протокол и SHA? Это то, что я изменяю в новом файле конфигурации nginx?

2 ответа

ssl_certificate_key должен содержать то, что в настоящее время находится в server.key, то есть незашифрованный закрытый ключ сервера.

ssl_certificate должен содержать сертификат сервера и цепочку сертификатов, как описано в документации, в указанном порядке. Итак, это в основном вывод cat 09********ss.crt gd_bundle.crt

Удобный онлайн-инструмент, чтобы быстро проверить, что именно каждый из этих -----BEGIN CERTIFICATE----- / -----END CERTIFICATE----- Блоки содержат https://www.sslshopper.com/certificate-decoder.html - если у вас есть машина с установленным openssl, вы, конечно, можете использовать

openssl x509 -in certificate.crt -text -noout

Что касается конфигурации SSL/TLS, мне нравится эта страница в вики Mozilla. Он объясняет большинство акронимов, с которыми вы можете столкнуться, и дает здравый совет относительно разумных конфигураций. Здесь есть сопровождающий онлайн-инструмент, который создаст эталонные настройки для Apache, nginx, haproxy и AWS LB. Например, полная конфигурация nginx, включающая сшивание OCSP и HSTS с использованием промежуточного профиля, выглядит следующим образом, но вы должны понимать, что эти профили развиваются и поэтому должны регулярно обновляться.

server {
    listen 443 ssl;

    # certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
    ssl_certificate /path/to/signed_cert_plus_intermediates;
    ssl_certificate_key /path/to/private_key;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;

    # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
    ssl_dhparam /path/to/dhparam.pem;

    # intermediate configuration. tweak to your needs.
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
    ssl_prefer_server_ciphers on;

    # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
    add_header Strict-Transport-Security max-age=15768000;

    # OCSP Stapling ---
    # fetch OCSP records from URL in ssl_certificate and cache them
    ssl_stapling on;
    ssl_stapling_verify on;

    ## verify chain of trust of OCSP response using Root CA and Intermediate certs
    ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

    resolver <IP DNS resolver>;

    ....
}

Как только все это будет установлено и протестировано, отправляйтесь в ssllabs и проведите тест. Если вы что-то пропустили, вы увидите, что еще нужно сделать.

  1. Первая часть:

    SSLCertificateFile /etc/apache2/ssl/11-2013/09********ss.crt
    

Это публичный сертификат для вашего сайта. Это тот, который вы бы изменили, чтобы изменить SHA1 на SHA2.

SSLCertificateKeyFile /etc/apache2/ssl/11-2013/server.key

Это частный сертификат для вашего веб-сервера.

SSLCertificateChainFile /etc/apache2/ssl/11-2013/gd_bundle.crt

Это промежуточный пакет сертификатов, чтобы свернуть сертификат вашего веб-сервера в корневой центр в godaddy (поскольку по умолчанию браузер не обязательно доверяет их корневому сертификату)

  1. Это дает инструкции о том, как настроить NGINX для использования промежуточной цепочки сертификатов (что вам, скорее всего, потребуется сделать, поскольку вам нужно было сделать это на вашем сервере Apache): nginx docs: Настройка серверов HTTPS

  2. Вы не измените конфигурацию сертификата в файле конфигурации NGINX. Когда у сертификата есть возможности, вы можете включить и выключить эти возможности в файле конфигурации (согласно ответу от fvu), но сначала вам нужно "обновить" сам сертификат. GoDaddy имеет несколько статей, которые могут быть полезны для этого, первая просто описывает, что вы делаете, когда вносите эти изменения: https://www.godaddy.com/help/rekey-certificate-4976 вторая говорит вам, как на самом деле сделать это с помощью их службы: https://www.godaddy.com/help/rekey-certificate-4976.

После того, как вы все это сделаете, вы можете использовать ssllabs для тестирования, но это будет работать только в том случае, если ваш новый сайт запущен и работает на правильном имени хоста в DNS (что вы, возможно, не захотите делать, если вам все еще нужен сайт вверх на Apache, пока вы не закончили). Предполагая, что у вас есть root где-нибудь на машине linux/unix, вы можете использовать openssl для проверки этого:

  1. Введите IP-адрес вашего нового сервиса NGINX в качестве имени сайта, с которым вы хотите протестировать. Таким образом, ваш основной сайт остается там, где он находится на Apache, вы только указываете своему локальному компьютеру, чтобы найти его на сайте NGINX. Как только вы это сделаете, выполните следующую команду и посмотрите, что она выводит:

    openssl s_client -connect hostname:port
    

Или используйте эту команду, которая указывает вам непосредственно на то, что вы проверяете: https://stackoverflow.com/questions/26473076/how-do-i-check-if-my-ssl-certificate-is-sha1-or-sha2-on-the-commandline

Другие вопросы по тегам