在 Windows 上配置 stunnel 和 openssl 以支持 TLS 1.2

Configuring stunnel and openssl on Windows to support TLS 1.2

我在 Windows(环境有 Windows 2008 和 Windows 10 环境)平台上启用 TLS 1.2 连接时遇到问题。目前,我的私钥由 Windows 证书存储管理,使用 stunnel (v 5.41) 中的 CAPI engineId,它使用 OpenSSL 1.0.2k-fips。因此,stunnel 只能协商 TLS 1.1 连接(出于显而易见的原因,SSLv2 和 SSLv3/TLS1 被禁用)。

我试过编译 OpenSSL 1.1.0f 和 stunnel 5.41,但无论是在 CentOS 下还是在 Windows 下使用 MSYS2/MINGW32 或 Cygwin 进行交叉编译都没有运气。

我正在专门寻找一种方法来管理 stunnel 中的 pfx/p12(私钥),而无需求助于 Windows 证书存储。我找到了一个关于如何配置 stunnel 以使用 capi 的示例 - 它工作得很好,但是因为 openssl 1.0.2 不支持 TLS 1.2 中使用的密码,所以只有 TLS 1.1 有效。我需要 TLS 1.2。

https://www.stunnel.org/pipermail/stunnel-users/2017-February/005720.html 记录为什么我不能将 TLS 1.2 与 OpenSSL 1.0.2 一起使用。

OpenSSL 1.0.2 内置于 Stunnel 5.41 中。重新编译没有用。我正在专门寻找如何配置 stunnel 以指向 pkcs12 密钥。

基于dave_thompson_085的评论的解决方案:

解决办法就是简单的把cert变量放在p12文件的位置,不包含engineId,不包含key。不要担心密码,stunnel 会提示输入密码。

我一直认为我需要设置一个引擎 - 就像 pkcs11 或 capi 一样。

也就是说,我想多了,完全错过了显而易见的事情。

下面的代码片段示例对我有用。 (上面的一切都保留为默认值,除了 sslOptions,它被设置为 sslOptions=TLS1.2

[https-test-services]
client=yes
accept=127.0.0.1:7000
connect=hostname.of.remote.server:8443
verifyChain = yes
CAfile = ca-certs.pem
cert = C:\Location\To\certandkey.p12
checkHost = hostname.of.remote.server
OCSPaia=yes