好吧,我会解释我做了什么…最后是任务。 谢谢!
为了build立我的VPN,我在服务器和客户端机器上安装了OpenVPN。 在服务器上,我将cert Authorityconfiguration在文件/ 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=”[email protected]”
然后我生成的证书:
cd / etc / openvpn / easy-rsa / ln -s openssl-1.0.0.cnf openssl.cnf source vars ./clean-all ./build-ca
创build了cerver certs:
./build-key-server myServer
Diffie Hellman参数到服务器
./build-dh
复制的证书和密钥/ etc / openvpn
cd keys / cp myServer.crt myServer.key ca.crt dh1024.pem / etc / openvpn /
创build客户端证书
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重新启动
validationtun0在那里
ifconfig tun0
启用/etc/sysctl.conf中的ip_forward参数,以便包可能会stream动
把net.ipv4.ip_forward = 1
还启用虚拟networking掩码,以便客户端可以访问所有的远程机器
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)
pre-up 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中的cert.ca.cert,client1.key,client1.conf文件获取以下client.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重新启动
而当我想validation接口tun0是否存在与ifconfig 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/[email protected] 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
我再次创build了密钥,并在client.conf文件中添加了证书的完整path,但仍然无效。 也尝试了所有我的防火墙禁用,仍然无法连接到我的服务器,因为这个错误。
另一个重要的是我的服务器是Ubuntu 12.04和客户端CentOS 6.3
我可以看到,我发现我的服务器,但仍然没有完成连接…
我该怎么办??
如果需要更多的configuration文件,告诉我给你看
您的错误消息表明客户端不pipe出于什么原因都不喜欢服务器提供的证书。 将server.crt的副本发送到客户端,然后运行:
openssl verify -purpose any -CAfile ca.crt server.crt
如果没关系,你应该得到一些类似于server.crt: OK东西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
如果是这种情况,请检查您的证书生成过程。
我也有这个问题。 问题是我正在使用easyrsa生成的ca.crt。 这是错误的。 在/ etc / ssl / misc / demoCA /中使用cacert.pem。