Проверка OCSP - невозможно получить сертификат локального эмитента
Я новичок в настройке SSL с нуля и сделал мои первые шаги. Я купил сертификат SSL от RapidSSL для своего домена и выполнил шаги по установке сертификата. В целом сертификат действителен и работает на моем веб-сервере (nginx v1.4.6 - Ubuntu 14.04.1 LTS), но если я пытаюсь активировать OCSP OCSP, я получаю следующую ошибку в моем файле nginx error.log:
Сбой OCSP_basic_verify() (SSL: ошибка:27069065: подпрограммы OCSP:OCSP_basic_verify: ошибка проверки сертификата: ошибка подтверждения: невозможно получить сертификат локального эмитента) при запросе статуса сертификата, отвечающий: gv.symcd.com
Я попробовал это также с этой командой из командной строки:
openssl s_client -connect mydomain.tld: 443 2> & 1 dev/null
И получил "ту же" ошибку, как в моем error.log:
[...] SSL-сессия: Протокол: TLSv1.2 Шифр: ECDHE-RSA-AES256-GCM-SHA384 [...] Время начала: 1411583991 Тайм-аут: 300 (с) Проверка кода возврата: 20 (невозможно получить локальный сертификат эмитента)
Но если скачать корневой сертификат GeoTrust и попробовать его с помощью этой команды:
openssl s_client -connect mydomain.tld: 443 -Cafile GeoTrust_Global_CA.pem 2>&1 dev/null
Проверка в порядке:
[...] SSL-сессия: Протокол: TLSv1.2. Шифр: ECDHE-RSA-AES256-GCM-SHA384 [...] Время запуска: 1411583262 Время ожидания: 300 (с). Проверка кода возврата: 0 (нормально)
Так что каким-то образом GeoTrust Root Cert не найден / не доставлен.
Мой конфиг сайта nginx:
server {
listen 443;
server_name mydomain.tld;
ssl on;
ssl_certificate /etc/ssl/certs/ssl.crt;
ssl_certificate_key /etc/ssl/private/ssl.key;
# Resumption
ssl_session_cache shared:SSL:20m;
# Timeout
ssl_session_timeout 10m;
# Security options
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
# OCSP Stapling
# It means that you sent status info about your certificate along with the request,
# instead of making the browser check the certificate with the Certificate Authority.
# This removes a large portion of the SSL overhead, the CloudFlare post above explains it in more detail.
ssl_stapling on;
ssl_stapling_verify on;
#ssl_trusted_certificate /etc/ssl/certs/ssl.pem;
#resolver 8.8.8.8 8.8.4.4 valid=300s;
#resolver_timeout 10s;
# This forces every request after this one to be over HTTPS
add_header Strict-Transport-Security "max-age=31536000";[...]};
RapidSSL написал в своей документации, что я должен добавить следующие сертификаты в ssl.crt в следующем порядке:
- myserver.crt
- Промежуточный CA CA (RapidSSL SHA256 CA - G3)
- Промежуточный пакет CA (GeoTrust Global CA)
Так я и сделал...
Прямо сейчас я понятия не имею, что я делаю неправильно... надеюсь, кто-нибудь здесь может мне помочь.
Спасибо!
2 ответа
Эти две ошибки не были связаны, хотя сообщение об ошибке было тем же.
[...] SSL-сессия: Протокол: TLSv1.2 Шифр: ECDHE-RSA-AES256-GCM-SHA384 [...] Время начала: 1411583991 Тайм-аут: 300 (с) Проверка кода возврата: 20 (невозможно получить локальный сертификат эмитента)
Выше ошибки была выдана команда openssl_client. Как объяснил Флориан Хейгл, вы получаете эту ошибку, потому что openssl_client требует корневого сертификата Globalsign в /etc/ssl/certs
,
Сбой OCSP_basic_verify() (SSL: ошибка:27069065: подпрограммы OCSP:OCSP_basic_verify: ошибка проверки сертификата: ошибка подтверждения: невозможно получить сертификат локального эмитента) при запросе статуса сертификата, отвечающий: gv.symcd.com
Для этой ошибки она была выдана процедурой nginx ocsp, особенно когда вы добавляете ssl_stapling_verify on;
строка в nginx.conf.
Вот некоторые выдержки из документации ssl_stapling_verify
объяснить почему выдает ошибку
Синтаксис: ssl_stapling_verify на | выкл;
Включает или отключает проверку ответов OCSP сервером.
Чтобы проверка работала, сертификат поставщика сертификата сервера, корневой сертификат и все промежуточные сертификаты должны быть настроены как доверенные с помощью директивы ssl_trusted_certificate.
Другими словами, вам необходимо предоставить (2) Промежуточный комплект CA (RapidSSL SHA256 CA - G3) и (3) Промежуточный комплект CA (GeoTrust Global CA) для ssl_trusted_certificate
директивы.
cat GeoTrustGlobalCA.crt rapidsslG3.crt > ocsp-chain.crt
и добавить ocsp-chain.crt
в ssl_trusted_certificate
директивы.
Я могу ответить только на часть этого.
openssl s_client -connect mydomain.tld: 443 2> & 1 dev/null
потребуется корневой сертификат Globalsign в /etc/ssl/certs. Есть пакет ca-Certificates, он у вас установлен?