суббота, 18 декабря 2010 г.

Создание тестового SSL сертификата, настройка HttpListener

Основан на How To: Walkthrough Using HttpListener as an SSL Simple Server

Я раньше не работал с SSL. И когда в одном проекте возникла необходимость использовать  SSL, я обнаружил, что нет простого объяснения того, как можно создать SSL сертификат. Результатом поиска стала эта статья. Она основана на англоязычном варианте и расширена информацией полученной из собственного опыта.


Создание кода

Ссылка на документацию по HttpListener: http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx (русский вариант: http://msdn.microsoft.com/ru-ru/library/system.net.httplistener.aspx). 


Создание сертификата

Создать сертификат можно утилитой makecert.exe. Документация по утилите доступна здесь http://msdn.microsoft.com/en-us/library/bfsktky3.aspx (русский: http://msdn.microsoft.com/ru-ru/library/bfsktky3.aspx).
 
Если у Вас установлена Visual Studio 2008/2010, то утилиту можно вызвать из командной строки Visual Studio. Командная строка Visual Studio доступна через меню программ (Microsoft Visual Studio 2010 > Visual Studio Tools > Visual Studio Command Prompt (2010)). В Windows Vista, Windows 7 командная строка должна быть запущена от имени администратора.

Если у Вас не установлена Visual Studio, то можно попробовать установить .NET Framework 2/3.5 SDK.

Пример вызова команды:

makecert.exe -sr LocalMachine -ss MY -N "CN=XML Litener" -sky exchange -pe 

В случае удачного выполнения команда вернет строку "Succeeded".

Из той же командной строки запустите MMC. В открывшемся окне выберите пункт меню File > Add/Remove snap-in. В открывшемся окне "Add of Remove Snap-ins" в списке "Available Snap-ins:" выделите Sertificates и нажмите клавишу "Add >". В окне "Certificates snap-in" выберите "Computer account", нажмите "Next >" и затем "Finish" и "OK". В результате дереве окна MMC должен появиться узел "Console Root" > "Cersificates (Local Computer)" > "Personal" > "Certificates". Узел должен содержать только что добавленный сертификат.




Для того, чтобы этот сертификат стал "проверенным", его нужно переместить в ветку "Console Root" > "Cersificates (Local Computer)" > "Trusted Root Certification Authorities" > "Certificates".

На названии сертификата (XML Listener) нажмите правую клавишу мыши и в контекстном меню выберите пункт "All tasks" > "Export...". Откроется окно мастера экспорта сертификатов "Certificate Export Wizard". В этом окне нужно несколько раз нажать клавишу "Next >" не изменяя параметров, указать имя файла для экспорта, например, "xmllistener.cer".

На узле дерева "Console Root" > "Cersificates (Local Computer)" > "Trusted Root Certification Authorities" > "Certificates" нажмите правую клавишу и в контекстном меню выберите пункт "All tasks" > "Import...". Откроется окно мастера "Certificate Import Wizard". Проимпортируйте файл "xmllistener.cer".

Двойным кликом откройте окно сертификата, перейдите на вкладку "Detail", скопируйте в буфер обмена значение поля Thumbprint. Это значение потребуется для следующего шага.

Привязка сертификата к порту

Документация по привязке сертификата к порту можно найти здесь: http://msdn.microsoft.com/en-us/library/ms733791.aspx (русский: http://msdn.microsoft.com/ru-ru/library/ms733791.aspx).

В Windows XP / Windows Server 2003 для привязки сертификата к порту нужно выполнить команду:

httpcfg set ssl -i 0.0.0.0:8012 -h 0000000000003ed9cd0c315bbb6dc1c08da5e6 -f 2

где после ключа -i указан адрес и порт, после ключа -h указано значение поля Thumbprint.

Утилита httpcfg.exe входит в состав пакета Support Tools. Этот пакет можно загрузить для Windows XP здесь для Windows Server 2003 здесь.

В Windows 7 / Windows Server 2008:

netsh http add sslcert ipport=0.0.0.0:8000 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF} clientcertnegotiation=enable

где в качестве значения certhash указано значение поля Thumbprint.

Для удаления привязки сертификата к порту в Windows XP нужно воспользоваться командой:

httpcfg delete ssl -i 0.0.0.0:8005 -h 0000000000003ed9cd0c315bbb6dc1c08da5e6

В Windows 7:

netsh http delete sslcert ipport=0.0.0.0:8005

Комментариев нет:

Отправить комментарий