Помилка 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також сертифікат ЦС, який мені також надіслав мій орган підписання. Проблема в тому, що я не придбав сертифікат SSL безпосередньо у GlobalSign, а натомість через свого хостинг-провайдера Singlehop.

Тестування

Сертифікат перевіряється належним чином у Safari та Chrome, але не у Firefox. Первинний пошук виявив, що це може бути проблемою із ЦС.

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

Я використав s_client openssl для тестування з'єднання і отримав вихід, який, схоже, вказує на ту ж проблему, що і аналогічне питання . Помилка така:

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 надсилає ці імена ЦС?

Спроби вирішити проблему

Я спробував вирішити проблему, завантаживши кореневий ЦС безпосередньо з 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, але, мабуть, не вдалося перетворити його належним чином. Дякую, щиро.
Jamie Counsell,

1
так, на що слід звернути увагу - це пари суб’єкта-емітента, що йдуть назад до кореня або CA. OpenSSL відображає їх як i:і s:нижче s_client. Отримавши необхідні сертифікати, з’єднайте всі, крім кореневої. Оскільки вони поєднані, вони повинні бути у форматі PEM. URL-адреса була корисною. Він старіє, намагаючись допомогти людям, які не надають інформацію, тому ми можемо дивитись на це місцево s_client. (Якби ви не вказали URL-адресу, я проголосував би за закриття).
jww

Відповіді:


48

jww має рацію - ви посилаєтесь на неправильний проміжний сертифікат.

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


-1

Якщо ви користувач 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]

це має вирішити вашу проблему

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.