Создание сокета SSL в Windows, который использует сертификаты WinCrypt для аутентификации? - PullRequest
1 голос
/ 30 марта 2012

При проверке подлинности клиентского соединения SSL сервер ожидает, что клиент предоставит сертификат. На типичных корпоративных платформах Windows эти сертификаты находятся в разделе «Личные» хранилища криптографии Windows (открывается с помощью этой команды: «certmgr.msc»)

OpenSSL не использует эти сертификаты. Windows действительно предоставляет WinHTTP API, который обеспечивает возможность создания SSL-соединений, но они должны придерживаться протокола HTTP-запросов / ответов. Кто-нибудь знает о Windows API, который позволяет программистам создавать SSL-соединения, которые аутентифицируются с использованием сертификатов хранилища криптографии Windows, но можно использовать как сокет OpenSSL ?, спасибо.

Ответы [ 2 ]

1 голос
/ 08 апреля 2013

Openssl поддерживает несколько криптографических механизмов, одним из которых является механизм Windows CAPI.

Вот результат openssl engine на моей машине. CAPI является последним:

(dynamic) Dynamic engine loading support
(4758cca) IBM 4758 CCA hardware engine support
(aep) Aep hardware engine support
(atalla) Atalla hardware engine support
(cswift) CryptoSwift hardware engine support
(chil) CHIL hardware engine support
(nuron) Nuron hardware engine support
(sureware) SureWare hardware engine support
(ubsec) UBSEC hardware engine support
(padlock) VIA PadLock (no-RNG, no-ACE)
(gost) Reference implementation of GOST engine
(capi) CryptoAPI ENGINE

Страница man OpenSSL engine (3) показывает пример кода о том, как выбрать движок в вашем коде. Сборка OpenSSL может быть немного сложнее. Вот пакетный файл, который будет производить статическую сборку со всеми статически связанными движками. Не лучший выбор для развертывания, но наличие одного файла освобождает вас от DLL Hell, пока вы работаете с деталями CAPI.

@echo off
setlocal

call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"

::Get the current directory name in the variable builddir
for /f "delims=\" %%a in ("%cd%") do set builddir=%%~nxa

::Configure build variable
perl Configure VC-WIN32 enable-static-engine --prefix=.

::Generate makefile
call ms\do_nasm.bat

::Build
nmake -f ms\nt.mak
::Test
nmake -f ms\nt.mak test
::Install
nmake -f ms\nt.mak install

endlocal
1 голос
/ 30 марта 2012

Doh !, получается WinSock изначально поддерживает SSL, предположительно, он аккуратно интегрируется с хранилищем сертификатов Windows.

РЕДАКТИРОВАТЬ: К сожалению, это только для Windows Mobile

Как указывает Люк в комментариях ниже, правильный подход - использовать API-интерфейс SChannel. Этот неприятный API обсуждается более подробно здесь .

...