OpenVPN:链中的自签名证书


9

我正在尝试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 = ** / emailAddress = **
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

而且,...我可以通过以下方式验证密钥:

openssl verify -CAfile ca.crt my.crt 
my.crt:确定

好吧,所以现在我彻底被迷住了。至此,我知道 CSR和密钥是使用适当的CSR生成的。实际上,这是执行此操作的命令:

openssl req -newkey rsa:2048 -new -out my.csr -keyout my.key

我也知道要这样做:

openssl x509 -subject -issuer -noout -in ca.crt

...

(眨!)

找到了吗?

该命令的输出如下所示:(进行了部分 编辑)

subject = / C = US / ST = VA / L = ** / O = ** / CN = ** CA / emailAddress = **
发行人= (相同)

而在来自OpenVPN的错误消息中,ST = 完全相同:

验证错误:深度= 1,错误=证书链中的自签名证书:/ C = US / ST = 弗吉尼亚州 / L = ** / O = ** / CN = ** / emailAddress = **

“ VA”不完全等于“弗吉尼亚”。


2
尝试使用openssl s_client -connect host:port -showcerts,然后将接收到的证书的指纹与进行比较openssl x509 -noout -text -in ca.crt
Shane Madden

Answers:


7

只是为了完全封闭该线程:这确实是问题所在。我收到的“ cart.crt”(“弗吉尼亚”)实际上不是我的同事正在使用的“ ca.crt”(“ VA”),并且当时我们都没有人注意到。

所以...基本上(纯粹从外行的角度而言), VPN试图走上授权链,寻找它期望找到的ca.crt,但从未成功(因为它不存在)。

而且,这是加密系统如此闻名的那些奇妙的消息之一:完全准确,但是对初学者来说完全是神秘的。(而且,公平地说,加密系统不喜欢泄露任何信息,因为它们假定与之交谈的人肯定是邪恶的夏娃,而不是爱丽丝或鲍勃。)


公平地说,我不认为这与CA链有任何关系,而与它首先是一个不同的CA并因此自动不受信任的事实有关。OpenSSL不必走很多步。也许那是你的意思。
gparent 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.