在Windows上创建一个SSL套接字,该套接字使用WinCrypt证书进行身份验证



对SSL客户端连接进行身份验证时,服务器希望客户端提供证书。在典型的公司Windows平台上,这些证书位于Windows加密存储的"个人"部分(使用以下命令打开:"certmgr.msc")

OpenSSL不使用这些证书。Windows确实提供了WinHTTP API,它提供了创建SSL连接的能力,但它们必须遵守HTTP请求/响应协议,有人知道Windows API吗?它允许程序员创建SSL连接,使用Windows加密存储证书进行身份验证,但可以像OpenSSL套接字一样使用?,谢谢

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

OpenSSL引擎(3)手册页显示了如何在代码中选择引擎的示例代码。构建OpenSSL可能有点棘手。这是一个批处理文件,它将生成一个静态构建,所有引擎也静态链接。这不是部署的最佳选择,但在处理CAPI细节时,拥有一个文件可以将您从DLL地狱中解放出来。

@echo off
setlocal
call "C:Program Files (x86)Microsoft Visual Studio 10.0VCvcvarsall.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 msdo_nasm.bat
::Build
nmake -f msnt.mak
::Test
nmake -f msnt.mak test
::Install
nmake -f msnt.mak install
endlocal

Doh!,事实证明,WinSock本机支持SSL,可能它与Windows证书存储完美集成。

编辑:很遗憾,这只适用于Windows Mobile

正如Luke在下面的评论中指出的那样,正确的方法是使用SChannel API。这里将更详细地讨论这个讨厌的API。

最新更新