Certificate

VPN 證書驗證失敗 (OpenVPN)?CentOS 和 Ubuntu

  • April 8, 2017

好的,我會解釋我做了什麼……最後是問題。謝謝你!

為了設置我的 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、c​​lient1.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 -&gt; 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

如果是這種情況,請檢查您的證書生成過程。

引用自:https://serverfault.com/questions/469409