在这些方向上用于配置隧道在 Windows 上会出现以下文本:
将有效的 SSL 公共证书复制到目录“C:\Program Files (x86)\stunnel”。为了使事情更加轻松,请将公钥和私钥证书合并到一个 .PEM 文件中。
我很想知道如何做到这一点,但这些说明跳过了它的具体内容。
有人可以告诉我怎么做吗?
我在使用 Windows 2016。
有问题的证书是 LetEncrypt SSL 证书,它与用于访问服务器的域匹配。
编辑我尝试使用 RalfFriedle 提供的以下说明制作一个 .pem
要从 mmc 导出,请双击证书,转到选项卡详细信息,导出到文件,按下一步,选择 Base-64 编码的 X.509,按下一步,选择文件名,按下一步并完成。虽然 Windows 想要添加 .cer 扩展名,但这是 PEM 格式的证书
生成的文件看起来像这样(没有我的混淆)...
-----BEGIN CERTIFICATE-----
ZZZZZZZZZZZZZZZZZZZZZ99ZZZZ9Z/ZZ+ZZZZZ9ZZZZ9ZZ9ZZZZZZZZ9ZZZZZZZZ
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ9ZZZZZZZZZZZZZZZZ9ZZZZZZZZZZZZ
ZZZZZZZZZZZZZZZZZZZ9ZZZ9ZZZZZZZ9ZZZZZZZZZZ9ZZZZ9ZZZZZZZ9ZZZZZZ9Z
ZZZZZZZZZZZ9ZZZZZZZZZZZZZZZZZZZZZ9Z9ZZZZZZZZZ9ZZZZZZZZZZZZZZZZZZ
9Z9ZZZZZZZZZZZ9ZZZZZZZZZZZZZZZZZZZ9Z9ZZZZZZZ9ZZZZZ9Z+Z9ZZZ9ZZ9ZZ
ZZZZZZZZZZZZZZZZZ9ZZZZZ99ZZ9ZZ9ZZZZZZ9ZZZZZZZ9Z9ZZZZ9ZZ9ZZ9ZZZ9Z
9Z9ZZZZZ9ZZZZ99ZZZZZZ9ZZZZZZZZZ/ZZZ9Z9Z9Z99ZZ99ZZZZZZ9Z9ZZZZZZZZ
9ZZZZZ9ZZZZZZZ9ZZZZ9Z9ZZZZZ9ZZZZ99ZZ9ZZ+ZZ99ZZZ99/Z9ZZZ99ZZZ9Z9Z
ZZZZZZZ9ZZZZZ9ZZ9ZZ/ZZZZZZZZZZZZZZZZZ9ZZZZZZZZZZZ9ZZZZZ9ZZZZZZ+Z
Z9Z9ZZ9ZZZ9ZZ99ZZZZZ9ZZZZZZZZZZZ9ZZZ9ZZZZ999Z9ZZZZZZZZZZZ9ZZZZZZ
ZZZZZZZZZZ9ZZZZ/ZZZZZZZZZZ9ZZ9ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
ZZZZZZZZZZZZZZ9ZZZZZZZ9ZZ9ZZZZZZZZZZ99Z9ZZZZZ9+9ZZZZZZZ9ZZZ/ZZZZ
ZZZZZZZZZZZZZZZZZZZZZZ9ZZZZZZZZZZZZZ99ZZZZZZZZZZZZZZZZZZZZZZZZZZ
ZZZZZZZZZZZZZZZZZZZ9ZZZ9ZZ9ZZ9ZZZZZZZZ99ZZ9ZZZZZZZ9ZZZZZZZ9ZZZZZ
ZZZZZZZZZZZZZZZZZ9Z9ZZZ9ZZ9ZZZZ9ZZZZZZ99ZZ9ZZZZZZZ9ZZZZZZZ9ZZZZZ
ZZZZZ9ZZZZZZZZ9ZZ9Z9ZZZZZZZZZ9ZZZZZ+ZZZZZZZZZZZZZZZZZZZZZ9ZZZZZZ
ZZZZZZZZZZZZZZZZZZZZZZZZ9ZZZZZZZZZZZZZZZZZZZZZZ9ZZZZZ9ZZZZ9ZZZZZ
ZZ9ZZZZZZZ9ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ9ZZZZZ9Z9ZZZZ
ZZZZZ99ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ9ZZ9ZZZZZZZZZZZZZZZ9ZZZ9Z
ZZZZZZ9ZZZZZZ9ZZZZ9ZZZZ9ZZZZZZZZZZZZZZZ9ZZZZZ9Z9ZZZZZ9ZZZ9ZZZZ99
ZZZZZZZZZZZ9ZZZ9ZZ9ZZZZZZZ9ZZZZZZZ9ZZZZZZZZZZ9ZZZZ9ZZZ9ZZZZZZZZZ
ZZZZZZZ9ZZZZZZZ9ZZZ9ZZZZZZZZZ9ZZZZZZZZZZZZZZZZ99ZZZZ9ZZZZZZZZZZZ
ZZZZZZZZZZZ9ZZ9ZZZZZZZZZZZZZZZZ9ZZZZZZZZZ9ZZZZZZZZZZZZ9ZZZZZZZZZ
ZZ9ZZZZZZZZZZZZZZZZZZZZZZZZZZZ99ZZZZZZZZZZZZZZZZZZZ9Z9ZZZZZZZZZZ
ZZZZZZZZZZZZZ9ZZZ9ZZZZZZZZZZZZZ+ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
ZZZZZZZZZZZ9Z9ZZZZZZ9Z9//9ZZZ9ZZ9ZZZ9ZZ/ZZZZZZZZZZZZZZZZZ9Z/+ZZZ
Z9ZZZZZZZZZZZZZZZZZZZZ9ZZZZZZZZZZZZZ9Z9ZZZZZZZZZZZZZZZZ9+ZZZ+ZZZ
ZZZZZZZZZ9ZZZZZ/ZZZZZZZZZZZZZ/ZZZZ9ZZZ+Z/ZZZZZZZZZZZZZZZZ9Z9ZZZZ
ZZZ9ZZ9Z9Z9ZZZZZZZZZZZZZZZZZZZZ9ZZZZZZZ+9ZZZZ9ZZZZZZZZZZZZZZZZ99
ZZZZZZZZ9ZZZZZ+ZZZ+ZZZZZZZZZZZ9ZZ9ZZ9ZZZZZ99ZZZZZZ9ZZZ9Z/ZZZZZZ9
9ZZZ9ZZZZ9ZZ9ZZZZ99ZZZZZZZ9Z9ZZZZZZZZ9ZZZZZZ9ZZ/Z9ZZ9ZZ9ZZZZZZZZ
Z9ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ9ZZ9Z9ZZZZZ9ZZZZZZZZZZZZZ
Z999ZZ9ZZZ==
-----END CERTIFICATE-----
当我尝试使用它时,框架报告......
OpenSSL.crypto.Error: [('PEM routines', 'PEM_read_bio', 'no start line')]
我将其添加到问题中,因为错误中的那些术语并没有多大意义,但我认为对于阅读该问题的人来说它可能意味着什么。
编辑2感谢 RalfFriedle 的评论,我找到了之前忽略的 stunnel doco 的一部分,其中记录了 .pem 文件中所期望的结构 - 它在这里:https://www.stunnel.org/static/stunnel.html#CERTIFICATES。
因此看起来如果我:
- 采取导出的结果;
- 生成私钥;
- 然后将两者合并为一个文件
它可能有效!我下次会尝试一下。
编辑3
使用 dave_thompson_085 建议的方法,我现在有一个可以工作的 PEM!太棒了!
不过有一件事,就是当使用它时,系统会提示我输入 PEM 密码短语。这是正常的,因为在运行建议的命令时,系统会提示我创建密码短语,但这对于正常使用来说并不理想。有没有办法让我做同样的事情,但没有密码短语?
此页面建议您可以使用 openssl 删除密码(https://futurestud.io/tutorials/how-to-remove-pem-password-from-ssl-certificate),但事实上该命令生成的文件不再被使用 pem 的进程接受。
我很高兴听到您关于如何做到这一点的建议。
另外,我在这里只想说,当我第一次开始使用 stunnel 中嵌入的 openssl 时,我看到了有关没有配置文件的警告。当我设置如下环境变量时,这些警告就消失了:
set OPENSSL_CONF=F:\bin\installed\stunnel\config\openssl.cnf
其中 'F:\bin\installed\stunnel' 是我安装 stunnel 的地方。
另一个给后续读者的警告。我有一份 openssl 副本,作为 Mingw/Git For Windows 环境的一部分,我尝试使用建议的命令(因为我已经打开了窗口),但我发现它只是挂起了。我不知道它为什么挂起了,但按照 dave_thompson_085 的做法,通过使用 stunnel 中嵌入的 openssl,效果很好。
答案1
假设你正在配置服务器端,任何包括 stunnel 的 SSL/TLS 服务器(部分不适用情况除外)需要私钥和证书。
如果您的 Windows 商店中的“证书”实际上是“带有私钥的证书”,即,如果位于个人商店(而不是受信任的根 CA 商店)中,并且其图标左上角有一个小黄色钥匙(除了右下角的黄色印章),并且它没有被限制出口,则需要执行不同的流程并附加一个步骤:
首先,运行导出向导(从 mmc/certmgr 或从 InternetOptions = inetopt.cpl / Content / Certifications)并选择“是导出私钥”,这将自动将格式设置为“PKCS#12 (PFX)”。为其提供密码和合适的文件名/位置;将其放在某个
%programfiles*%\stunnel
目录中可能是最方便的。其次,运行 openssl 命令行程序;Windows 的 stunnel 发行版中包含一个程序(或者至少在我之前得到的版本中),或者还有很多其他地方可以获取适用于 Windows 的 OpenSSL 版本。在 CMD 窗口(或 powershell)中执行以下操作:
openssl pkcs12 -in thep12fromWindows -out mycertandkey.pem
"(programfilesdir)\stunnel\bin\openssl"
除非该目录不在您的 PATH 或工作目录中(Windows 会自动在这些目录中找到未修饰的名称),否则请指定完整路径名。使用任何您方便的方式来标识此证书和密钥;.pem
后缀不是必需的,但为了清晰起见我建议使用后缀。此文件将包含 PEM 格式的证书和 PEM 格式的私钥,如 stunnel 说明中所述。默认情况下,私钥是加密的,因此每次启动 stunnel 时都需要输入密码;如果您不想这样,也不担心某些恶意人士可以访问此文件,然后使用您的密钥和证书冒充您的服务器并拦截其流量,请添加
-nodes
到上面的命令中。
如果 Windows 商店中的证书条目不包含私钥,或者将私钥设置为禁止导出,则您无法使用它。如果没有私钥,则证书一定是在其他系统上获得的(并复制到此处),因为如果没有私钥,您无法从大多数 CA(尤其是 LE)获得证书。找到证书的来源并从那里获取私钥。如果私钥存在但受到限制,它仍然可能是从其他地方复制的,你可以从那里获取它。如果没有,如果密钥是在这里生成的和在出生时设置限制,不管是谁做的,都毁了你生活的这一部分。去惩罚他们,然后扔掉这个证书,重新开始,生成一个不受限制的新私钥,并为它获取证书,然后使用它们。
答案2
页面位于让我们加密包含概述以及可用于创建证书的许多不同程序的链接。它应该可以回答您的问题,如果没有,您可以提出更具体的问题。
编辑
大多数程序都会直接从 Let's encrypt 获取 PEM。我建议你找到一种方法,让你的程序直接将 PEM 文件存储在你需要的地方,因为证书必须在三个月后更新。
要从 mmc 导出,请双击证书,转到详细信息选项卡,导出到文件,按下一步,选择 Base-64 编码的 X.509,按下一步,选择文件名,按下一步并完成。虽然 Windows 想要添加扩展名.cer
,但这是格式的证书PEM
。
PEM 证书如下所示:
-----BEGIN TRUSTED CERTIFICATE-----
MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL
MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln
biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp
U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg
SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln
biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm
GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve
fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw
AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ
aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj
aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW
kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC
4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga
FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEDBUMBQGCCsG
AQUFBwMEBggrBgEFBQcDAQw8VmVyaVNpZ24gQ2xhc3MgMyBQdWJsaWMgUHJpbWFy
eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEc0
-----END TRUSTED CERTIFICATE-----