У нас есть тестовый сервер, который я пытаюсь переключить на HTTPS / SSL, и у него есть как внутренний IP, так и внешний IP. Мы должны использовать самозаверяющие сертификаты для этого конкретного сервера. В прошлом был один раз, когда я проводил некоторые исследования и разработки RTMPS с Flash, поэтому у меня все еще лежал список шагов, чтобы создать самозаверяющий сертификат для внутреннего IP-адреса и поместить его в надежное хранилище на клиенте. машины.
При этом мне нужно, чтобы это работало одновременно как для внутреннего, так и для внешнего IP-адреса. Когда я пытаюсь использовать те же шаги для создания сертификата для внешнего IP-адреса и доверия к нему, сервер продолжает пытаться обмануть внутренний IP-адрес, даже если клиент использует внешний IP-адрес. Очевидно, это как-то связано с прохождением HTTP-заголовков и получением сертификата для сайта по умолчанию. Таким образом, даже если сертификат внешнего IP-адреса является доверенным, клиентский компьютер продолжает генерировать предупреждение системы безопасности при переходе на сайт по внешнему IP-адресу.
Полностью отбрасывая мои предыдущие заметки о том, как это сделать с внутренним IP-адресом, как это можно обработать симулятивно как для внутреннего, так и для внешнего IP? Как вы можете использовать самозаверяющие сертификаты для обоих IP-адресов, чтобы ни один из них не генерировал предупреждение безопасности в браузере клиента?
Обратите внимание, что это не дубликат. Я понимаю, что есть информация об альтернативных именах субъектов, сертификатах с подстановочными знаками и т. Д. Однако:
Многое из этого предназначено для Apache; Я использую IIS 7.
По большей части это для Linux; Я использую винду.
Он также имеет дело с доменными именами, которые кажутся необходимыми для сертификатов с подстановочными знаками; Я использую только IP.
Кое-что из того, что осталось на данный момент, предполагает, что у меня будут варианты в IIS или Windows, которые не доступны повсеместно.
Те несколько кусочков, которые могут остаться, немного выше моей головы, и шаги, которые они используют, предполагают некоторые уже существующие знания, которых просто нет. Другими словами, они пропускают шаги, переходят к более сложным темам и т. Д.
Каков четкий список шагов для этого, если предположить, что сервером является IIS 7 / Windows Server 2008 R2, и что клиентские машины используют Windows 7 (иногда Windows Embedded Standard) и разные версии IE? Клиенты получают доступ к страницам, веб-службам и т. Д. Через IP-адреса, и я использовал OpenSSL (хотя я открыт для других вариантов). Спасибо.
Вам действительно не следует использовать IP-адреса в сертификате SSL; вам следует настроить надлежащую инфраструктуру DNS, чтобы у вас, например, было internal.yourdomain.com
указывая на внутренний IP-адрес, и external.yourdomain.com
указывая на внешний; тогда вам нужно будет указать оба имени в качестве альтернативных имен субъектов в сертификате, и он будет работать безупречно.
Тем не менее, вы жестяная банка использовать IP-адреса в качестве SAN; но как именно это можно сделать, зависит как от инструмента, который вы используете для запроса сертификата, так и от центра сертификации, который будет его выдавать.
В обоих случаях вы должны использовать не замужем сертификат с двумя SAN; использование двух сертификатов не имеет смысла и даже не сработает, потому что вы не можете привязать два разных сертификата к одному и тому же веб-сайту.
См. Ответ Массимо о Правильно способ сделать это.
В противном случае вы можете добавить IP-адреса в SAN сертификата, создав файл конфигурации со следующими параметрами (плюс любые другие необходимые параметры):
[ v3_ca ]
subjectAltName = IP:1.2.3.4
Или, если у вас есть несколько IP-адресов ....
[ v3_ca ]
subjectAltName = @alt_names
[alt_names]
IP.1 = 1.2.3.4
IP.2 = 2.3.4.5
IP.3 = 3.4.5.6
Затем введите обычную команду OpenSSL, чтобы создать сертификат со следующими дополнениями:
-extfile configuration_file_mentioned_above.cnf -extensions v3_ca
Примечание: строка выше обычно начинается с openssl x509 -req
если у вас проблемы.
Простейший действительный файл конфигурации будет примерно таким (я сохранил его как example.cfg
):
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_ca
[ req_distinguished_name ]
commonName = TypeCommonNameHere
[v3_ca]
subjectAltName = @alt_names
[alt_names]
IP.1 = 203.0.113.1
IP.2 = 192.0.2.1
IP.3 = 198.51.100.1
Затем запустите:
openssl req -x509 -nodes -days 3653 -newkey rsa:2048 -keyout example.key -out example.pem -config example.cfg
Он запросит общее имя для сертификата и напишет example.key и example.pem с закрытым и открытым ключами (соответственно). Кроме того, вы должны указать IP-адреса в файле конфигурации, но не можете указать там общее имя (вы можете, но вам все равно нужно ввести его, когда OpenSSL запросит его).
Кроме того, в этом примере используется весь файл конфигурации, где исходный ответ выше предполагает, что у вас уже есть файл конфигурации и вы дополняете его информацией SAN из файла конфигурации расширения (это, вероятно, просто более запутанно, но причина, по которой я этого не сделал используйте аргументы, приведенные в исходном ответе)
Если у вас есть два IP-адреса или на основе имени, вам понадобятся два сертификата и два определения https. На Apache httpd это будет два vhost-раздела.