Правильный способ реализации SSL на локальном хосте

11

Кто-нибудь может предложить современный способ создания самозаверяющих сертификатов для локального хоста, который будет принят Chrome и Mozilla?

Я попробовал поколение openssl, однако Mozilla жалуется, что эмитент не заслуживает доверия.

Centos 7, nginx

Тарлан Мамедзада
источник
Используйте Let's Encrypt .
Томас
2
Это локальный домен, давайте шифровать работает только на зарегистрированных
Тарлан Mammadzada
2
Перейдите на сайт, нажмите «Дополнительно» и нажмите «Добавить исключение».
Ричард Смит
1
Вы хотите, чтобы он выглядел безопасным, вам понадобится самозаверяющий ЦС, и вы будете использовать его для подписи сертификата вашего сервера, затем вы можете добавить ЦС в хранилище доверенных сертификатов браузера.
Ричард Смит
1
Похоже, что Firefox прекратил принимать самозаверяющие сертификаты. Как говорит @RichardSmith, вам нужно будет использовать Центр сертификации для генерации ваших сертификатов. Перед тем, как погрузиться в это минное поле, вам, возможно, придется изучить последствия для безопасности работы вашего собственного Органа.
garethTheRed

Ответы:

10

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

Но если вам нужно, продолжайте читать для быстрого и грязного CA, который даст вам https://localhost/без предупреждения ...

Создайте следующий текстовый файл:

# OpenSSL configuration for Root CA

[ req ]

prompt             = no
string_mask        = default

# The size of the keys in bits:
default_bits       = 2048
distinguished_name = req_distinguished_name
x509_extensions    = x509_ext

[ req_distinguished_name ]

# Note that the following are in 'reverse order' to what you'd expect to see.

countryName = gb
organizationName = Test
commonName = Test Root CA

[ x509_ext ]

basicConstraints=critical,CA:true,pathlen:0
keyUsage=critical,keyCertSign,cRLSign

Сохранить как и root.cnfсгенерировать запрос с помощью:

$ openssl req -x509 -new -keyout root.key -out root.cer -config root.cnf

Это создаст ваш сертификат Root CA ( root.cer) и ваш закрытый ключ Root CA ( root.key), который вы должны сохранить в секрете. Он запросит пароль для закрытого ключа - убедитесь, что вы выбрали надежный.

Теперь создайте файл конфигурации для сертификата сервера:

# OpenSSL configuration for end-entity cert

[ req ]

prompt             = no
string_mask        = default

# The size of the keys in bits:
default_bits       = 2048
distinguished_name = req_distinguished_name

x509_extensions    = x509_ext

[ req_distinguished_name ]

# Note that the following are in 'reverse order' to what you'd expect to see.

countryName = gb
organizationName = Test
commonName = localhost

[ x509_ext ]

keyUsage=critical,digitalSignature,keyAgreement

subjectAltName = @alt_names

# Multiple Alternate Names are possible
[alt_names]
DNS.1 = localhost
# DNS.2 = altName.example.com

Сохраните его как server.cnfи сгенерируйте запрос с помощью:

openssl req -nodes -new -keyout server.key -out server.csr -config server.cnf

Выше будет сгенерирован еще один закрытый ключ ( server.key), который вы должны защитить. В этом случае ключ не защищен паролем, но вы можете добавить пароль, удалив этот -nodesпараметр.

Наконец, подпишите запрос с вашим новым корневым центром сертификации и расширениями из server.cnfфайла (для удобства):

$ openssl x509 -req -in server.csr -CA root.cer -CAkey root.key -set_serial 123 -out server.cer -extfile server.cnf -extensions x509_ext

Примечание: выберите любое случайное число для -set_serialопции.

Он запросит пароль, который вы ввели при создании корневого центра сертификации.

Сертификат сервера ( server.cer) будет создан.

Теперь добавьте сертификат Root CA ( root.cer) в хранилище привязки доверия Firefox, чтобы браузер доверял вашему новому CA.

Запустите тест, используя OpenSSL в качестве временного веб-сервера с:

$ sudo openssl s_server -key server.key -cert server.cer -accept 443 -www

Примечание. Вы можете получить ошибки, если у вас уже есть сервер, работающий на порту 443. В этом случае либо остановите работающий сервер, либо измените указанный выше номер порта на другой неиспользуемый порт, изменив окончание на (например) -accept 8443 -www

Когда вы перейдете к https://localhost(или https://localhost:8443если вы изменили номер порта выше) с Firefox, вы теперь не должны видеть предупреждений и получать список шифров, которые может предложить ваша установка OpenSSL.

Когда вы будете довольны результатами, добавьте server.keyи server.cerк своему исходному веб-серверу и настройте его соответствующим образом.

garethTheRed
источник
1
Есть опечатка; stinguished_nameдолжно бытьdistinguished_name
user281357
вы говорите: (или localhost: <порт >, если вы изменили номер порта выше) ... где я могу установить номер порта?
эль
хорошо, извините, тогда я не правильно понял заключительную часть ваших объяснений. В любом случае, я мог бы добавить корневой сертификат через настройки Firefox, и теперь он работает правильно.
эль
моя проблема: что значит "sudo openssl ... -принимать 443 -www"? это открывает браузер? просто проверьте, может ли он правильно обращаться к localhost через порт 443? он близок к «добавлению корневого CA в Firefox», поэтому мне не было ясно, добавит ли он сертификат или просто протестирует его. (Я делал заметки о своем процессе, но я не знаю, как поделиться ими ... 80% это ваш ответ, поэтому я не буду публиковать его в качестве ответа здесь: -)
Эль
Интересно, почему вы тестируете это с openssl, а не с firefox напрямую ... но, да, если это ваша цель, то лучше.
эль