在1深度查找opensslvalidation错误7:证书签名失败

我在CentOS上安装了OpenVPN服务器。 我有两个客户端 – 首先在CentOS下(所有的作品),并尝试连接Windows客户端。

我用生成build-key实用程序生成客户端的证书。

如果我在服务器端检查它 – 似乎都可以:

 # openssl verify -CAfile /etc/openvpn/clients/setevoy/ca.crt /etc/openvpn/clients/setevoy/setevoy.crt /etc/openvpn/clients/setevoy/setevoy.crt: OK 

但是 – 当我在Windows下检查相同的证书时 – 出现错误:

 $ openssl verify -CAfile ca.crt setevoy.crt setevoy.crt: /C=UA/ST=CA/L=Kiev/O=Fort-Funston/OU=MyOrganizationalUnit/CN=venti.setevoy.org.ua/name=openvpn_root/[email protected] error 7 at 1 depth lookup:certificate signature failure 

文件似乎是相同的服务器上(从我复制他们)和Windows客户端(他们被放置在c/Program Files (x86)/OpenVPN/config

 # md5sum /etc/openvpn/clients/setevoy/ca.crt 53984cf44daffb708cdb937fa3d30438 /etc/openvpn/clients/setevoy/ca.crt $ md5sum ca.crt 53984cf44daffb708cdb937fa3d30438 *ca.crt # md5sum /etc/openvpn/clients/setevoy/setevoy.crt c818d312e58db514a9a2afae4c687241 /etc/openvpn/clients/setevoy/setevoy.crt $ md5sum setevoy.crt c818d312e58db514a9a2afae4c687241 *setevoy.crt 

我认为, Windows的OpenSSL机制出了问题…或类似的问题:

 $ head setevoy.crt | grep Signature Signature Algorithm: sha256WithRSAEncryption 

然后,当我尝试启动OpenVNP GUI – 出现错误:

Wed Dec 17 11:44:25 2014 TLS_ERROR:BIO读取tls_read_plaintext错误:错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书validation失败Wed Dec 17 11:44:25 2014 TLS错误:TLS对象 – >传入明文读取错误Wed Dec 17 11:44:25 2014 TLS错误:TLS握手失败

UPD

在服务器上:

 # openssl version OpenSSL 1.0.1e-fips 11 Feb 2013 

Windows客户端上:

 $ openssl.exe version OpenSSL 0.9.7l 28 Sep 2006 

UPD 2

我升级OpenSSLOpenVPN的GUI ,现在是1.0.1,并verify工程:

 $ ../bin/openssl.exe version OpenSSL 1.0.1j 15 Oct 2014 $ ../bin/openssl.exe verify -CAfile ca.crt setevoy.crt setevoy.crt: OK 

但是 – 我仍然无法连接,在日志中有相同的错误。

我还安装了新的CentOS服务器,仅用于testing,还安装了OpenVPN客户端 – 所有的工作。 只有Windows客户端的问题。

OpenSSL 0.9.7是旧的,不支持SHA256,因此无法validation您的服务器的证书。 您必须将客户端OpenSSL升级到至less0.9.8(这不是二进制兼容的,因此可能需要重新编译,或者获得不同的OpenVPN编译),或者更改为使用SHA1-RSA签名的服务器证书。

“SHA1不好”:公共网站上的浏览器和CA(驱动大多数SSL / TLS使用)正在强制性地取消SHA1签名的证书,因为它们预计很快会发生碰撞攻击。 但是,VPN(通常)是一种受控的情况,在您运行CA时,只有less量的客户端,并且您事先知道它们; 那么您就不必担心碰撞攻击,而且SHA1有足够的安全性 – 只要您不受某些规定或策略的约束,即禁止SHA1处于安全状态,并且您不能获得豁免。

怎么样? 我不知道OpenVPN / easy-rsa在哪里设置了OpenSSL用于certsigning的参数(它可能在CONF文件或命令行中,任何一种方式都可以使用envvar)。 显着的社区,任何人都可以轻松地帮 如果没有人做,你指向特定的版本或下载我可以看看。

PS-它可能会帮助,如果你标签openvpn具体而不是vpn。

问题是由Windows OpenSSL造成的,而这个问题不能用sha256algorithm。

解决scheme,我发现 – 编辑configuration文件/etc/openvpn/easy-rsa/openssl-1.0.0.cnf (或其他,取决于您的服务器上的OpenSSL版本),并设置:

 default_md = md5 

代替

 default_md = sha245 

然后 – 重新生成所有服务器和客户端的证书和密钥(包括Hoffman密钥)。

之后 – OpenVPN GUI几乎可以正常工作…