在上一章的测试中,可以看到提示中包含了******* WARNING *******: all encryption and authentication features disabled -- all data will be tunnelled as cleartext这句话,表明由于没有认证,所以VPN隧道中的流量都是明文的。
*****预共享密钥可以用于小型VPN网络,如果数量多起来的话配置会非常麻烦********
现使用最简单的预共享密钥进行加密
先来生成密钥,在Centos上使用如下命令可在当前目录下生成一个2048bit的密钥文件secret.key
/usr/local/sbin/openvpn --genkey --secret secret.key
文件内容如下
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
18111a27e319a4efc2e538d134e6fd3c
2348893fad5d59deba0f52053b5fda08
7d9b38854e8bbbb861cd733dcc8b79f1
7af85a7a20fa31677f8f1b132f2e6e29
5d46d25e1e7d35c5d067887ceb966a9a
22a9fa8c73eb74a0bbbcb05221fedd03
2272433c3d1306143051d8a8c4bf90d7
c00382b72781a9cbc5d69eb7ceebef4d
ed3ce5255bd1a8ca38ea47390c0c71ec
c1770c4422e5c2bdeba18d3843a3b46a
bc62dd5234bc0eb21156739bf906dad3
2f31db872aa317a9758433d9185c2152
3d3caa7bb47acb26e6828346ba14066b
58b5dbfc02eb48e6a3dfc2ec0ed04a57
d1b4e149d56e82b41019cf75e5e6653d
26dc496761e742b4ec594f2be26d66cf
-----END OpenVPN Static key V1-----
对称加密
Client与Server之间的流量都使用同一个密钥进行加密,这个密钥就是secret.key文件,具体来说,是把整个key的内容划分成四个部分(如上四个颜色块)
CentOS上
/usr/local/sbin/openvpn --ifconfig 172.16.5.1 255.255.255.0 --dev tap --secret secret.key
Win7上
openvpn --ifconfig 172.16.5.2 255.255.255.0 --dev tap --secret c:\secret.key --remote coosh.net
无论是客户端还是服务器端,任何方向的数据,均使用18111a27e319a4efc2e538d134e6fd3c来做加解密用的CIPHER key,使用5d46d25e1e7d35c5d067887ceb966a9a22a9fa8c来做加解密HMAC key。
非对称加密
服务器Centos端上的命令如下(--verb 7是debug命令,可以不写)
/usr/local/sbin/openvpn --ifconfig 172.16.5.1 255.255.255.0 --dev tap --secret secret.key 0 --verb 7
客户端Win7上的命令如下
openvpn --ifconfig 172.16.5.2 255.255.255.0 --dev tap --secret secret.key 1 --verb 7 --remote coosh.net
服务器端有四个key,分别是
加密CIPHER key:18111a27e319a4efc2e538d134e6fd3c
加密HMAC key:5d46d25e1e7d35c5d067887ceb966a9a22a9fa8c
解密CIPHER key:ed3ce5255bd1a8ca38ea47390c0c71ec
解密HMAC key:3d3caa7bb47acb26e6828346ba14066b58b5dbfc
客户端也有四个key,分别是
加密CIPHER key:ed3ce5255bd1a8ca38ea47390c0c71ec
加密HMAC key:3d3caa7bb47acb26e6828346ba14066b58b5dbfc
解密CIPHER key:18111a27e319a4efc2e538d134e6fd3c
解密HMAC key:5d46d25e1e7d35c5d067887ceb966a9a22a9fa8c
万变不离key文件的内容。
==========================================================
如果不需要加密和HMAC,可以使用--auth none参数,方便排错。