VPN 證書驗證失敗 (OpenVPN)?CentOS 和 Ubuntu
好的,我會解釋我做了什麼……最後是問題。謝謝你!
為了設置我的 VPN,我在伺服器和客戶端機器上安裝了 OpenVPN。在伺服器上,我在文件 /etc/openvpn/easy-rsa/vars 中配置了證書頒發機構,編輯以下行:
export KEY_COUNTRY=”ES” export KEY_PROVINCE=”M” export KEY_CITY=”Madrid” export KEY_ORG=”My Organization” export KEY_EMAIL=”mail@example.com”
然後我生成了證書:
cd /etc/openvpn/easy-rsa/ ln -s openssl-1.0.0.cnf openssl.cnf source vars ./clean-all ./build-ca
創建了 cerver 證書:
./build-key-server myServer
向伺服器發送 Diffie Hellman 參數
./build-dh
複製的證書和密鑰 /etc/openvpn
cd 密鑰/ cp myServer.crt myServer.key ca.crt dh1024.pem /etc/openvpn/
創建客戶證書
cd /etc/openvpn/easy-rsa/ source vars ./build-key client1
將此證書複製到客戶端電腦並從伺服器中刪除它們:
/etc/openvpn/ca.crt
/etc/openvpn/easy-rsa/keys/cliente.crt
/etc/openvpn/easy-rsa/keys/cliente.key
將 /etc/openvpn/server.conf 編輯為我的文件名
ca ca.crt cert myServer.crt key myServer.key dh dh1024.pem
/etc/init.d/openvpn 重啟
已驗證 tun0 存在
ifconfig tun0
在 /etc/sysctl.conf 上啟用了 ip_forward 參數,因此包可以流動
net.ipv4.ip_forward=1
還啟用了虛擬網路遮罩,因此客戶端可以訪問所有遠端電腦
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
並保存了ip表conf,這樣它們就不會在重新啟動時消失
將conf保存到文件中
sudo sh -c “iptables-save > /etc/iptables.rules”
編輯 /etc/network/interfaces 添加介面(在本例中為 eth0)
預處理 iptables-restore < /etc/iptables.rules
獲取以下 server.conf
port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key dh dh1024.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt keepalive 10 120 comp-lzo persist-key persist-tun status openvpn-status.log verb3
在客戶端中,我安裝了 OpenVPN 並使用證書編輯了 /etc/openvpn 中的 client.conf 文件:ca.cert、client1.key、client1.conf 得到以下 client.conf 文件:
client dev tun proto udp remote xxx.xxx.xxx.xxx 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client1.crt key client1.key ns-cert-type server comp-lzo verb 3
然後重新啟動:
/etc/init.d/openvpn 重啟
當我想用 ifconfig tun0 驗證介面 tun0 是否存在時,不存在。
所以我在客戶端機器上檢查了我的日誌是否有錯誤,並且有這個錯誤:
VERIFY ERROR: depth=0, error=unable to get local issuer certificate: /C=Es/ST=M/L=Madrid/O=xxx/OU=xxx/CN=myServer/name=xxx/emailAddress=mail@xxxx.co TLS_ERROR: BIO read tls_read_plaintext error: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed user openvpn[7984]: TLS Error: TLS object -> incoming plaintext read error user openvpn[7984]: TLS Error: TLS handshake failed
這是伺服器日誌中的錯誤
xxx.xxx.xxx.xxx:59439 SIGUSR1[soft,tls-error] received, client-instance restarting MULTI: multi_create_instance called xxx.xxx.xxx.xxx:59485 Re-using SSL/TLS context xxx.xxx.xxx.xxx:59485 LZO compression initialized xxx.xxx.xxx.xxx:59485 Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ] xxx.xxx.xxx.xxx:59485 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ] xxx.xxx.xxx.xxx:59485 Local Options hash (VER=V4): '530fdded' xxx.xxx.xxx.xxx:59485 Expected Remote Options hash (VER=V4): '41690919' xxx.xxx.xxx.xxx:59485 TLS: Initial packet from [AF_INET]xxx.xxx.xxx.xxx:59485, sid=0349f4d6 657535c9 xxx.xxx.xxx.xxx:59440 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity) xxx.xxx.xxx.xxx:59440 TLS Error: TLS handshake failed xxx.xxx.xxx.xxx:59440 SIGUSR1[soft,tls-error] received, client-instance restarting
我再次創建了密鑰,並在 client.conf 文件中添加了證書的完整路徑,但它仍然不起作用。還嘗試禁用我的所有防火牆,但由於該錯誤仍然無法連接到我的伺服器。
另一個重要的事情是我的伺服器是 ubuntu 12.04 和客戶端 CentOS 6.3
我可以看到我找到了我的伺服器,但連接仍然沒有完成……
我該怎麼辦??
如果需要更多配置文件,請告訴我給你看
您的錯誤消息表明客戶端不喜歡伺服器提供的證書,無論出於何種原因。將 server.crt 的副本發送到客戶端,然後執行:
openssl verify -purpose any -CAfile ca.crt server.crt
如果沒問題,你應該得到一些看起來像
server.crt: OK
基本上,您要檢查 server.crt 是否由客戶端上的 ca.crt 文件正確簽名。您可以通過省略
-CAfile ca.crt
. 在這種情況下(或者如果 ca.crt 沒有簽署 server.crt),您將收到如下消息:error 20 at 0 depth lookup:unable to get local issuer certificate
如果是這種情況,請檢查您的證書生成過程。