Я создал свой собственный CA:
openssl genrsa -out private/rootCA.key 2048
openssl req -batch -new -x509 -nodes -key private/rootCA.key -sha256 -days 1024 -config ./openssl.conf -out certs/rootCA.pem
Я создал сертификат для своего сайта:
openssl genrsa -out private/$domain.key 2048
openssl req -batch -new -key private/$domain.key -config ./openssl.conf -subj "/commonName=$domain" -out csr/$domain.csr
openssl x509 -req -in csr/$domain.csr -CA certs/rootCA.pem -CAkey private/rootCA.key -CAcreateserial -out certs/$domain.crt -days 500 -sha256
Я присоединяюсь к сертификату сайта и корневому сертификату в связке:
cat certs/$domain.crt certs/rootCA.pem > bundles/$domain.bundle.crt
Я копирую сертификат / ключ в каталог конфигурации nginx:
cp bundles/$domain.bundle.crt private/$domain.key /etc/nginx/conf/certs
Я уверен, что nginx использует эти сертификаты для моего сайта:
ssl_certificate /etc/nginx/certs/mysite.bundle.crt;
ssl_certificate_key /etc/nginx/certs/mysite.key;
Я перезапускаю nginx.
Я устанавливаю корневой сертификат в моей системе:
sudo cp certs/rootCA.pem /usr/local/share/ca-certificates/myrootCA.crt
sudo update-ca-certificates
Я проверяю с httpie
:
»Http https://mysite
http: error: SSLError: HTTPSConnectionPool(host='mysite', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",),))
Я проверяю с помощью openssl
(говорит, что он использует каталог ca-Certificates, который, по-видимому, не используется по умолчанию):
openssl s_client -host mysite -port 443 -prexit -showcerts -CApath /usr/local/share/ca-certificates
Который дает:
Verify return code: 19 (self signed certificate in certificate chain)
И проверка не завершена.
Открытие сайта в Chrome дает мне стандартную ошибку:
Этот сервер не может доказать, что это mysite; его сертификат безопасности не является доверенным для операционной системы вашего компьютера. Это может быть вызвано неверной конфигурацией или злоумышленником, перехватывающим ваше соединение.
У меня есть два вопроса:
- Почему сайт не является доверенным для всей системы после установки корневого сертификата? Chrome использует общесистемные сертификаты, верно?
- Почему
open_ssl s_client
не может завершить проверку сертификата?
РЕДАКТИРОВАТЬ
Curl работает с общесистемным сертификатом:
curl https://mysite
Почему работает curl, а chrome/httpie нет?