c # прокси, генерирующий сертификат для трафика https? - PullRequest
0 голосов
/ 02 февраля 2012

Я пытаюсь запустить этот код с помощью https: http://www.codeproject.com/Articles/93301/Implementing-a-Multithreaded-HTTP-HTTPS-Debugging

В нижней части страницы написано, что мне нужно создать новый сертификат с закрытым ключом, чтобы запустить его с https с помощью makecert.exe. Это команда, использованная автором:

makecert.exe cert.cer -a sha1 -n "CN = matt-dot-net" -sr LocalMachine -ss My -sky подпись -pe -len 2048

Я выполнил ту же команду, просто изменил CN на свое имя хоста и заменил сертификат. Теперь, когда я захожу на сайт https, я получаю предупреждение в Firefox (так же, как при использовании fiddler):

Это соединение ненадежное. Я понимаю риски -> добавить исключение

и тогда я получаю эту ошибку:

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

Затем я нажимаю [Подтвердить исключение безопасности], и все, кажется, работает.

Как удалить ошибку «Неверный сертификат сайта»? Я сгенерировал сертификат неправильно? насколько я понял в примере makecert.exe на сайте, закрытый ключ не включен? Спасибо!

Ответы [ 3 ]

1 голос
/ 02 февраля 2012

Во-первых, вы можете сгенерировать самоподписанный сертификат (с основными ограничениями CA) для вашего приложения (вы можете сделать так, чтобы ваше приложение генерировало его автоматически) и импортировать этот сертификат в ваш браузер как доверенный CA.

ЗатемВы можете сгенерировать новый сертификат на лету в зависимости от запрошенного имени хоста, выданного вашим ЦС (т. е. подписанного с использованием его закрытого ключа и с использованием DN субъекта СА в качестве DN эмитента нового сертификата).В этом вопросе есть подробности о генерации сертификатов в C #: Можно ли программно сгенерировать сертификат X509, используя только C #?

Этот сертификат должен соответствовать спецификациям HTTP overСпецификация TLS :

Если присутствует расширение subjectAltName типа dNSName, это ДОЛЖНО использоваться в качестве идентификатора.В противном случае ДОЛЖНО использоваться (наиболее определенное) поле общего имени в поле «Тема» сертификата.Хотя использование общего имени является существующей практикой, оно устарело, и сертификационным органам рекомендуется вместо этого использовать dNSName.

[...]

В некоторых случаях указывается URIкак IP-адрес, а не имя хоста.В этом случае iPAddress subjectAltName должно присутствовать в сертификате и должно точно соответствовать IP-адресу в URI.

Короче говоря, если запрошено только имя хоста, вам будет достаточно простоCN=hostname RDN в Subject DN (хотя было бы лучше Subject Alt Name), но если это IP-адрес, вы должны поместить запись IP Subr альтернативного имени IP-адреса (хотя некоторые браузеры позволят вам избежать использования IP-адресав CN RDN на практике).

Если вам нужен прокси-сервер, который перехватывает TCP-пакеты без указания имени сервера, вам может оказаться очень трудно определить, какое именно имя хоста запрашивается.Я бы предложил выполнить обратный поиск в DNS для IP-адреса (который вы сможете найти) и поместить запись альтернативного имени субъекта DNS для каждой обратной записи DNS, а также запись альтернативного имени субъекта IP для IP-адреса.Это должно охватывать большинство случаев, за исключением тех случаев, когда клиент использует имя хоста, для которого IP-адрес не имеет обратной записи DNS.В противном случае вам просто нужно добавить исключение вручную в браузере (это хорошо, так как вы будете знать, что перехватываете свое собственное сообщение) или настроить его вручную в прокси.

Поиск имени хоста проще с помощью HTTP-прокси, настроенного в браузере, так как вам не нужно угадывать имя хоста, оно будет передано в CONNECT HTTP-глагол.

(Конечно,Начнем с того, что для конкретного хоста вы можете сгенерировать сертификат с помощью makecert, а не делать это на лету.)

0 голосов
/ 02 февраля 2012

Сделайте так, чтобы имя сертификата совпадало с именем вашего хоста, то есть «stackoverflow» для stackoverflow.com.

0 голосов
/ 02 февраля 2012

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

...