OpenVPN---传输协议与静态密钥协议

876 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情

传输协议与静态密钥协议

1、选项proto p

功能:用于指定与远程主机通信时所使用的协议

默认(不指定的情况下)是UDP协议,当然也需要可靠传输时,我们也可以设置为TCP协议

设置TCP时需要指定tcp-server,tcp-clinet

配置如下:

#server[root@vpn ~]# openvpn --ifconfig 10.200.0.1 10.200.0.2 --dev tun --proto tcp-server
​
#clinet[root@client1 ~]# openvpn --ifconfig 10.200.0.2 10.200.0.1 --dev tun --remote 192.168.9.130 --proto tcp-clinet

现在将客户端断开,然后再看服务端的日志信息:

Mon Jun 13 08:11:07 2022 Connection reset, restarting [0]        #由于我们使用的是tcp协议,客户端断开之后,服务端是感知的,因此服务端会有连接重置,重启的过程
Mon Jun 13 08:11:07 2022 /sbin/ip addr del dev tun0 local 10.200.0.1 peer 10.200.0.2
Mon Jun 13 08:11:07 2022 SIGUSR1[soft,connection-reset] received, process restarting
Mon Jun 13 08:11:08 2022 ******* WARNING *******: All encryption and authentication features disabled -- All data will be tunnelled as clear text and will not be protected against man-in-the-middle changes. PLEASE DO RECONSIDER THIS CONFIGURATION!
Mon Jun 13 08:11:08 2022 TUN/TAP device tun0 opened
Mon Jun 13 08:11:08 2022 /sbin/ip link set dev tun0 up mtu 1500
Mon Jun 13 08:11:08 2022 /sbin/ip addr add dev tun0 local 10.200.0.1 peer 10.200.0.2
Mon Jun 13 08:11:08 2022 Could not determine IPv4/IPv6 protocol. Using AF_INET
Mon Jun 13 08:11:08 2022 Listening for incoming TCP connection on [AF_INET][undef]:1194

密钥文件使用

1、在前面的实验中,输出的日志信息中,都会提示我们素有的数据传输都是以铭文传输的,不安全,因此我们需要对数据进行加密。

我们知道OpenVPN有两个通道:数据通道,控制通道。加密就是针对的数据通道。其中有两种方式:

  • 静态密钥(Static Key)

    • 优点:不需要证书和CA,配置简单
    • 缺点:密钥的分发与管理成本高
  • TLS密钥协商(TLS-negotiated Key)

静态密钥的实现方式:就是同一个Key文件在两端节点都存在。

2、密钥文件生成与使用

在server或者clinet端生成密钥都行,然后在通过ssh或者其它途径输送至对端。

#生成密钥
[root@vpn ~]# openvpn --genkey --secret aa.key
[root@vpn ~]# openvpn --ifconfig 10.200.0.1 10.200.0.2 --dev tun --secret aa.key
​
#客户端使用
[root@client1 ~]# openvpn --ifconfig 10.200.0.2 10.200.0.1 --dev tun --remote 192.168.9.130 --secret aa.key

3.1、选项genkey说明:

功能:生成一个用于共享加密的密钥文件

通过--secret选项指定文件名

3.2、选项secret file [direction]

功能:

  • 启用静态密钥加密模式
  • 指定一个由--genkey生成的密钥文件

密钥文件用法:

  • 从密钥文件内容中抽取出两个对称密钥

    • 加密密钥:抽取出两个密钥,一个是用来加密数据,
    • 签署数据包的HMAC密钥(Hash-based Message Authentication Code)

image.png

  • 通过direction抽取出两对非对称密钥(也就是说需要抽取四个密钥):

    • 客户端的加密密钥
    • 客户端的HMAC密钥
    • 服务端的加密密钥
    • 服务端的HMAC密钥

image.png

补充:什么是对称密钥、非对称密钥?

对称密钥:就是通信两端必须使用相同的密钥对明文进行加密、解密运算。

非对称密钥:每一端都有一对唯一对应的密钥(对端的公,私钥相同):公钥、私钥。公钥对外开放,私钥个人私密保管。发送数据的一方用另一方的公钥对发送的信息进行加密,然后由接收者用自己的私钥继续进行解密。

通过日志分析密钥文件的使用

1、通过--verb 7选项输出详细信息

默认是1

openvpn --ifconfig 10.200.0.1 10.200.0.2 --dev tun --secret aa.key --verb 7

可以发现以上学习都是通过命令参数的形式来指定特定的功能。这样显得很笨重,OpenVPN支持指定配置文件的方式进行配置:

选项:config file

功能:用于载入指定的配置文件

格式:

  • 配置文件中的选项没有--
  • 配置文件可以嵌套
  • 行首的"#"或者";"字符表示注释行
  • 包含空格的参数,一定要包含在双引号或者是单引号中
  • 不在单引号中的反斜线\,会被当做shell的转义符
  • Windows系统;使用双斜线来表示路径名:secret "C:\openvpn\secret.key"

如下配置:

[root@vpn ~]# vi aa.conf
ifconfig 10.200.0.1 10.200.0.2 
​
dev tun
​
secret /root/aa.key
​
​
[root@vpn ~]# openvpn --config aa.conf

\