赞
踩
本文介绍OpenVPN最后一种连接方式,通过SSL/TLS认证方式连接,也就是利用公钥密码那套:首先生成根证书秘钥、利用根证书秘钥创建根证书、生成服务器私钥,利用根证书签发服务器证书,生成Diffie-Hellman文件(用于密钥交换)、生成客户端私钥,利用根证书签发客户端证书。
注意:OpenVPN的服务器和客户端都拥有自己的私钥和公钥,服务器和客户端是通过验证对方的证书来确定对方的合法性,所以,这里服务器的证书和客户端的证书都是由同一个根证书签发的。
本文仍然以服务器和单个客户端的方式来介绍OpenVPN的SSL/TLS的连接方式。
本文以openssl命令来创建所有的文件。建议新建一个文件路径,在这个目录中生成所有文件。
openssl genpkey -algorithm RSA -out ca.key -aes256
该命令生成一个根证书的私钥文件,该私钥用aes256对称加密算法加密。
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt
该命令生成根证书文件ca.crt。证书利用sha256哈希处理,证书有效期为10年。
openssl genpkey -algorithm RSA -out server.key -aes256
该命令会生成服务器的私钥文件,其中包含服务器的私钥
openssl req -new -key server.key -out server.csr
该命令用于生成服务器向根证书请求证书的请求文件,输完会有如下提示,按照要求填写即可:
- # openssl req -new -key server.key -out server.csr
- You are about to be asked to enter information that will be incorporated
- into your certificate request.
- What you are about to enter is what is called a Distinguished Name or a DN.
- There are quite a few fields but you can leave some blank
- For some fields there will be a default value,
- If you enter '.', the field will be left blank.
- -----
- Country Name (2 letter code) [XX]:CN
- State or Province Name (full name) []:GuangDong
- Locality Name (eg, city) [Default City]:GuangZhou
- Organization Name (eg, company) [Default Company Ltd]:xxxx
- Organizational Unit Name (eg, section) []:xxxx
- Common Name (eg, your name or your server's hostname) []:xxxx
- Email Address []:xxxx
- Please enter the following 'extra' attributes
- to be sent with your certificate request
- A challenge password []:
- An optional company name []:
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650 -sha256
该命令利用证书签名请求文件,使用根证书签发服务器证书。输完命令会提示输入密码,密码就是创建根证书使用的私钥。
openssl dhparam -out dh.pem 2048
该命令用于生成密钥交换文件。用于秘钥协商阶段。
openssl genpkey -algorithm RSA -out client.key -aes256
openssl req -new -key client.key -out client.csr
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 3650 -sha256
步骤7-9同服务器一样,这里就不多赘述。
openssl verify -CAfile ca.crt server.crt
openssl verify -CAfile ca.crt client.crt
以上命令用于验证证书链是否完整,确保生成的证书无误,如果中间还有别的中间证书,可以通过-untrusted xxx.crt加入中间证书。
至此,我们得到了如下文件:
ca.crt:根证书
server.key:服务器私钥
server.crt:服务器证书
dh.pem:秘钥交换文件
client.key:客户端私钥
client.crt:客户端证书
将ca.crt,server.key,server.crt和dh.pem拷贝到服务器的配置文件路径,将ca.crt,client.key和client.crt拷贝到客户端的配置文件路径。至此,用于SSL/TLS的证书完成。
- dev tun
- ifconfig 10.8.0.1 10.8.0.2
- tls-server
-
- ca ca.crt
- cert server.crt
- key server.key
- dh dh.pem
-
- status openvpn-status.log
- log /var/log/openvpn.log
这里新增加了tls-server,ca,cert,key和dh选项,各个选项含义如下:
tls-server:开启TLS,并且角色为TLS服务器端。
ca:指定ca根证书
cert:指定服务器证书
key:指定服务器私钥
dh:指定秘钥交换文件
openvpn --cd /etc/openvpn --config server.conf
- dev tun
- proto udp
- tls-client
-
- remote 192.168.5.100 1194
- ifconfig 10.8.0.2 10.8.0.1
- verb 3
-
- ca ca.crt
- cert client.crt
- key client.key
-
- status openvpn-status.log
- log openvpn.log
选项在前面都介绍过,此处不在赘述。
openvpn --cd /etc/openvpn --config client.conf
本文介绍了OpenVPN SSL/TLS的连接方式,从证书的生成到配置文件的配置,本文介绍的仍然是最简单的单客户端和服务器的模式。SSL/TLS方式的底层技术是RSA公钥密码,所以非常安全,相比于静态秘钥的方式,该方式适用于多客户端的模式。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。