CentOS 7.9环境下不使用easy-rsa,基于已有证书配置OpenVPN的问题咨询
CentOS 7.9环境下不使用easy-rsa,基于已有证书配置OpenVPN的问题咨询
嗨,我来帮你搞定这个配置问题!你现在的核心问题应该是P12格式的证书需要先拆分成OpenVPN能识别的单独文件,还有server.conf里的参数没对应好,咱们一步步来操作:
第一步:拆分EJBCA生成的ca.p12证书包
EJBCA签发的p12文件是把CA证书、服务器证书和私钥打包在一起的,OpenVPN需要单独的文件,用openssl命令提取:
- 提取CA根证书:
执行时会提示输入p12文件的保护密码,输入你在EJBCA设置的密码就行。openssl pkcs12 -in ca.p12 -nokeys -cacerts -out ca.crt - 提取服务器端证书:
openssl pkcs12 -in ca.p12 -nokeys -clcerts -out server.crt - 提取服务器私钥:
这里会先输入p12的密码,之后还会让你设置一个私钥的保护密码(可选,如果不想每次启动OpenVPN都输密码,可以用下面的命令去掉密码):openssl pkcs12 -in ca.p12 -nocerts -out server.keyopenssl rsa -in server.key -out server-nopass.key
第二步:放置证书并设置权限
CentOS 7.9的OpenVPN默认会从/etc/openvpn/certs/目录读取证书文件,先创建这个目录(如果没有的话):
mkdir -p /etc/openvpn/certs/
把刚才生成的ca.crt、server.crt、server-nopass.key(或server.key)移动到这个目录:
mv ca.crt server.crt server-nopass.key /etc/openvpn/certs/
关键!私钥的权限必须严格限制,不能让其他用户读取,否则OpenVPN会报错:
chmod 600 /etc/openvpn/certs/server-nopass.key chmod 700 /etc/openvpn/certs/
第三步:修改OpenVPN服务器配置文件
打开/etc/openvpn/server.conf,找到并修改以下核心配置项(如果原来的配置项被注释了,去掉注释并替换路径):
# 指定CA根证书路径 ca /etc/openvpn/certs/ca.crt # 指定服务器证书路径 cert /etc/openvpn/certs/server.crt # 指定服务器私钥路径(用无密码的那个) key /etc/openvpn/certs/server-nopass.key
同时确认其他必要配置项(如果没有就加上):
# 监听端口,默认1194 port 1194 # 使用UDP协议(也可以用tcp,看需求) proto udp # 使用隧道模式 dev tun # 分配给客户端的网段 server 10.8.0.0 255.255.255.0 # 推送路由给客户端(让客户端能访问服务器所在的内网,按需调整) push "route 192.168.1.0 255.255.255.0" # 启用TLS认证(可选,但建议开启,需要额外生成ta.key,不过如果暂时不想弄可以先注释) # tls-auth ta.key 0
第四步:验证配置并启动服务
先检查配置文件有没有语法错误:
openvpn --config /etc/openvpn/server.conf --check-config
如果没有报错,启动OpenVPN服务:
systemctl start openvpn@server
查看服务状态确认是否正常运行:
systemctl status openvpn@server
如果启动失败,查看日志排查问题:
journalctl -u openvpn@server -f
额外注意事项
- 检查服务器证书的用途:用下面的命令查看证书的扩展信息,确认包含
TLS Web Server Authentication,否则OpenVPN会拒绝使用该证书:
在输出里找openssl x509 -in /etc/openvpn/certs/server.crt -text -nooutX509v3 Extended Key Usage字段,确保有TLS Web Server Authentication。 - 如果防火墙开着,需要开放1194端口(UDP):
firewall-cmd --add-port=1194/udp --permanent firewall-cmd --reload - 还要确保IP转发已经开启:
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p
备注:内容来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

