Ошибка SSL: невозможно получить сертификат местного эмитента

95

У меня проблемы с настройкой SSL на 32-битном сервере Debian 6.0. Я относительно новичок в использовании SSL, так что терпите меня. Я включаю столько информации, сколько могу.
Примечание. Настоящее доменное имя было изменено для защиты идентичности и целостности сервера.

Конфигурация

Сервер работает с использованием nginx. Он настроен следующим образом:

ssl_certificate           /usr/local/nginx/priv/mysite.ca.chained.crt;
ssl_certificate_key       /usr/local/nginx/priv/mysite.ca.key;
ssl_protocols             SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers               HIGH:!aNULL:!MD5;
ssl_verify_depth          2;

Я привязал свой сертификат, используя метод, описанный здесь

cat mysite.ca.crt bundle.crt > mysite.ca.chained.crt

где mysite.ca.crt сертификат, предоставленный мне органом подписи, и bundle.crtсертификат CA, также отправленный мне моим органом подписи. Проблема в том, что я приобрел сертификат SSL не напрямую у GlobalSign, а через моего хостинг-провайдера Singlehop.

Тестирование

Сертификат правильно проверяется в Safari и Chrome, но не в Firefox. Первоначальный поиск показал, что это может быть проблема с центром сертификации.

Я исследовал ответ на аналогичный вопрос , но не смог найти решения, так как не совсем понимаю, для чего служит каждый сертификат.

Я использовал openssl s_client для проверки соединения и получил вывод, который, похоже, указывает на ту же проблему, что и аналогичный вопрос . Ошибка следующая:

depth=0 /OU=Domain Control Validated/CN=*.mysite.ca
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 /OU=Domain Control Validated/CN=*.mysite.ca
verify error:num=27:certificate not trusted
verify return:1

Полную информацию об ответе openssl (с сокращенными сертификатами и ненужной информацией) можно найти здесь .

Я также вижу предупреждение:

No client certificate CA names sent

Возможно ли, что в этом проблема? Как я могу гарантировать, что nginx отправляет эти имена CA?

Попытки решить проблему

Я попытался решить проблему, загрузив корневой ЦС непосредственно из GlobalSign, но получил ту же ошибку. Я обновил корневой ЦС на своем сервере Debian с помощью этой update-ca-certificatesкоманды, но ничего не изменилось. Вероятно, это связано с тем, что CA, отправленный моим провайдером, был правильным, поэтому это привело к двойному связыванию сертификата, что не помогает.

0 s:/OU=Domain Control Validated/CN=*.mysite.ca
   i:/C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2
1 s:/O=AlphaSSL/CN=AlphaSSL CA - G2
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
2 s:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA

Следующие шаги

Пожалуйста, дайте мне знать, если я могу что-то попробовать, или я просто все неправильно настроил.

Джейми Каунселл
источник
10
Сертификат вашего домена подписан эмитентом AlphaSSL CA - SHA256 - G2. Однако ваша сеть поставляет промежуточные продукты AlphaSSL CA - G2. Я считаю, что вам нужно удалить текущий промежуточный сертификат ( AlphaSSL CA - G2) и заменить его сертификатом с отпечатком пальца ae:bf:32:c3:c8:32:c7:d7...( AlphaSSL CA - SHA256 - G2). Также отправлять не нужно GlobalSign Root CA. Клиент должен внедрять свои доверительные отношения (или на промежуточное звено).
jww
6
Вы сможете протестировать это локально с помощью OpenSSL. Попробуй openssl s_client -connect <server>:<port> -CAfile <GlobalSign Root CA.pem>. Команда должна заканчиваться Verify OK (0)или подобным. Когда вы получите Verify OK (0), сервер настроен правильно (для этой проблемы).
jww
6
Когда вы загрузите этот новый промежуточный продукт, вам нужно будет преобразовать его в PEM с помощью openssl x509 -in gsalphasha2g2.crt -inform DER -out Alpha-SHA256-G2.pem -outform PEM.
jww
Красивая. Я считаю, что сейчас это работает. По какой-то причине мне показалось, что я пытался получить SHA 256, но мне, должно быть, не удалось его правильно преобразовать. Спасибо, искренне.
Джейми Конселл
1
да, нужно искать пары "субъект-издатель", возвращающиеся к корневому каталогу или центру сертификации. OpenSSL отображает их как i:и s:под s_client. Получив необходимые сертификаты, объедините их все, кроме корневого. Поскольку они объединены, они должны быть в формате PEM. URL-адрес был полезен. Стареет пытаться помочь людям, которые не предоставляют информацию, чтобы мы могли посмотреть на нее локально s_client. (Если бы вы не указали URL-адрес, я бы проголосовал за закрытие).
jww

Ответы:

48

jww прав - вы ссылаетесь не на тот промежуточный сертификат.

Поскольку вам был выдан сертификат SHA256, вам понадобится промежуточное звено SHA256. Вы можете скачать его здесь: http://secure2.alphassl.com/cacert/gsalphasha2g2r1.crt

RickK
источник
-3

Если вы являетесь пользователем Linux Обновите узел до более поздней версии, запустив

sudo apt update

 sudo apt install build-essential checkinstall libssl-dev

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.35.1/install.sh | bash

nvm --version

nvm ls

nvm ls-remote

nvm install [version.number]

это должно решить вашу проблему

Коллинз Коеч
источник