Как я уже говорил в этом ответе :
Для обеспечения безопасности SSL / TLS необходимо как минимум 3 балла:
- Подходящий шифркомплект и успешное рукопожатие.
- Проверка того, что клиент доверяет сертификату сервера (обычно через известный центр сертификации в модели PKI).
- Проверка того, что сертификат принадлежит серверу клиентапредназначен для связи (проверка имени хоста).
Второй и третий пункты выполняются вашим сертификатом.Вы столкнулись с проблемой, связанной с третьим пунктом: проверка имени хоста.
Использование самозаверяющего сертификата является заменой использования сертификата, выданного ЦС (частью PKI).Это говорит вам, можете ли вы доверять содержанию сертификата как подлинному (как заявлено эмитентом).Выпуская и используя самоподписанный сертификат, вы утверждаете его содержание самостоятельно.Ваши клиенты должны будут четко доверять тому, что вы говорите.Это хорошо для небольших развертываний, где вы можете убедить клиентов установить самоподписанный сертификат в качестве доверенного сертификата.
Проверка имени хоста - обязательный шаг после этого.Если вы проверяете личность кого-либо с помощью его паспорта, недостаточно проверить, является ли это подлинным паспортом из страны, которую вы узнаете: вам также необходимо убедиться, что фотография соответствует человеку перед вами.То же самое применимо и здесь: то, к чему вы хотите подключиться, дается моим именем хоста (или IP-адресом), и оно должно совпадать с именем хоста (или IP-адресом) в сертификате, с которым вы представлены.
Конечно, localhost
доступен только с самого локального компьютера, как сказать «я». Как сервер, вам нужно, чтобы имя в сертификате совпадало с тем, что ваши клиенты будут называть. Обычно лучше сделать это, используя имя хоста, а не IP-адрес.Обратите внимание, что согласно RFC 2818 , если вы используете IP-адрес, он также должен быть в расширении Subject Alternative Name (хотя некоторые браузеры будут гибкими в этом требовании).
(Возможно, вас также заинтересует этот ответ . Хотя речь идет о Java-сервере, принципы все те же, поскольку проверка сертификата зависит от клиента, который может быть на любом языке.)
РЕДАКТИРОВАТЬ: (Вы удалили большую часть вашего первоначального вопроса, поэтому мой ответ выше может не иметь смысла ...)
Короче говоря, да, вы можетесоздать сертификат, который идентифицирует машину по IP-адресу.
Теоретически ( RFC 2818 ), IP-адрес должен быть в расширении Subject Alternative Names (SAN) вашего сертификата (это будетбыть SAN типа «IP», а не «DNS»).Однако на практике этот конкретный раздел спецификации соблюдается слабо, поэтому вы, вероятно, захотите указать свой IP-адрес в общем имени (CN) вашего DN субъекта.Если браузеры не в состоянии реализовать RFC 2818 в достаточной степени, вы даже можете обойтись без использования только CN=your.ip.address
в Subject DN без необходимости записи в SAN.( Java-клиенты, похоже, строго относятся к этому , но это может быть необязательным для вашего контрольного примера.)
Я не уверен, с чем вы генерируете свой сертификат.makecert.exe
, к сожалению, не может генерировать сертификаты с SAN.
В этом случае вы можете сгенерировать самоподписанный сертификат, например, с помощью OpenSSL (см. Примечания надно это ответ ).При необходимости создайте файл PKCS # 12 (с расширением .pfx
или .p12
из своего личного ключа и сгенерированного сертификата (openssl pkcs12 -export -in cert.pem -inkey privkey.pem -out store.pfx
). После этого изучите настройку сертификата из файла .pfx
в IIS Express.Вам нужно будет импортировать сертификат и закрытый ключ в ваше хранилище сертификатов (скорее всего, двойной щелчок должен вызвать правильное диалоговое окно). Затем используйте его (как если бы он пришел из ЦС), в зависимости от того, как вы конфигурируетеIIS, возможно, потребуется задействовать netsh
. Кажется, здесь есть учебник: http://blogs.blackmarble.co.uk/blogs/rfennell/post/2011/03/22/how-to-expose-iis-express-to-external-network-connections-and-use-a-non-self-signed-certificate.aspx(Команды netsh
также перечислены в этом вопросе , упомянутом @MrZombie: вам нужно найти хэш самозаверяющего сертификата, просмотрев установленные сертификаты, и адаптировать номер порта в соответствии с вашимустановка.)