我正在尝试使用TunnelBlick(已知良好的 OS/X OpenVPN 2.2.1 客户端)使用证书进行连接,但未成功。这是我收到的(已清理)错误消息:
2012-01-11 11:18:26 TLS:来自 **.**.**.** 的初始数据包:1194,sid=17a4a801 5012e004 2012-01-11 11:18:26 验证错误:深度=1,错误=证书链中的自签名证书: /C=US/ST=**/L=**/O=**/CN=** /电子邮件地址=** 2012-01-11 11:18:26 TLS_ERROR:BIO 读取 tls_read_plaintext 错误:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败 2012-01-11 11:18:26 TLS 错误:TLS 对象 -> 传入明文读取错误 2012-01-11 11:18:26 TLS 错误:TLS 握手失败 2012-01-11 11:18:26 TCP/UDP:关闭套接字
现在,问题来了。我自己生成了一个 CSR来请求这个证书,使用对方提供给我的ca.crt文件(实际上,他们做了两次只是为了确保)。
客户端配置中的相关条目是:
ca ca.crt
cert my.crt
key my.key
Run Code Online (Sandbox Code Playgroud)
而且,此外......我可以通过这种方式验证密钥:
openssl verify -CAfile ca.crt my.crt
my.crt: OK
好的,所以现在我彻底迷惑和难住了。此时,我知道CSR 和密钥是使用正确的 CSR 生成的。事实上,这是执行此操作的命令:
openssl req -newkey rsa:2048 -new -out my.csr -keyout my.key
Run Code Online (Sandbox Code Playgroud)
我也知道这样做:
openssl x509 -subject -issuer -noout -in ca.crt
Run Code Online (Sandbox Code Playgroud)
...
(眨!)
我刚刚找到了吗?
该命令的输出如下所示:( 稍作编辑)
主题= /C=US/ST= VA /L=**/O=**/CN=** CA/emailAddress=** 发行人= (相同)
而在来自 OpenVPN 的错误消息中, ST=并不完全相同:
验证错误:深度=1,错误=证书链中的自签名证书:/C=US/ST= Virginia /L=**/O=**/CN=**/emailAddress=**
“VA”并不完全等于“弗吉尼亚”。
小智 10
只是为了完全关闭这个线程:这确实是问题所在。我收到的“ca.crt”(“Virginia”)实际上并不是我同事正在使用的那个(“VA”),当时我们都没有注意到。
所以......基本上(并且纯粹用外行的话) VPN 试图沿着权威链向上走,寻找它期望找到的 ca.crt,但它从来没有(因为它不存在)。
而且,这是加密系统众所周知的美妙信息之一:完全准确,但对外行来说完全神秘。(而且,公平地说,加密系统不喜欢泄露任何信息,因为他们认为与他们交谈的人肯定是邪恶的夏娃,而不是好爱丽丝或鲍勃。)
| 归档时间: |
|
| 查看次数: |
44339 次 |
| 最近记录: |