OpenVPN证书生成

CentOS版

easy-rsa下载与配置修改

  1. 下载easy-ras并解压

wget https://github.com/OpenVPN/easy-rsa/archive/v3.0.7.tar.gz 
mv v3.0.7.tar.gz easy-rsa-3.0.7.tar.gz
tar xf easy-rsa-3.0.7.tar.gz

  1. 根据vars.example生成全局配置文件vars

cd easy-rsa-3.0.7/easyrsa3
cp -a vars.example vars

  1. 修改vars文件
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19

tee -a vars <<-'EOF'

set_var EASYRSA_REQ_COUNTRY     "CN"
set_var EASYRSA_REQ_PROVINCE    "GD"
set_var EASYRSA_REQ_CITY        "GuangZhou"
set_var EASYRSA_REQ_ORG         "jj"
set_var EASYRSA_REQ_EMAIL       "junjie2025@gmail.com"
set_var EASYRSA_REQ_OU          "jj"


set_var EASYRSA_KEY_SIZE        2048    # 长度
set_var EASYRSA_ALGO            rsa     # 算法

set_var EASYRSA_CA_EXPIRE      36500    # CA证书过期时间,单位天
set_var EASYRSA_CERT_EXPIRE    36500    # 签发证书的有效期是多少天,单位天

EOF

生成服务端证书和客户端证书

初始化与创建CA根证书

  1. 初始化,会在当前目录创建PKI目录,用于存储一些中间变量及最终生成的证书:

./easyrsa init-pki

  1. 生成CA根证书:

./easyrsa build-ca

这部分有如下注意点:

  • 需要输入PEM密码,输入两次,此密码必须记住,不然以后不能为证书签名
  • 需要输入common name,这个随便设置个独一无二的就好了,比如openvpn

生成服务端证书

  1. 为服务端生成证书对并在本地签名。nopass参数生成一个无密码的证书,在此过程中会让你确认ca密码

./easyrsa build-server-full server nopass

  1. 创建Diffie-Hellman,确保key穿越不安全网络的命令,时间会有点长,耐心等待:

./easyrsa gen-dh

生成客户端证书

  1. 执行如下指令,生成多个客户端证书对,并在本地签名。nopass参数生成一个无密码的证书(我暂时不考虑),在此过程中会让你确认ca密码。

./easyrsa build-client-full client nopass    # 无密码,实际应用中不推荐,客户端有密码可提高安全性
./easyrsa build-client-full zhangsan    # 让你输入密码,后续VPN连接时会使用
./easyrsa build-client-full lisi        # 让你输入密码,后续VPN连接时会使用
./easyrsa build-client-full wangwu      # 让你输入密码,后续VPN连接时会使用

为了提高安全性,生成ta.key

  1. 加强认证方式,防攻击。如果配置文件中启用此项(默认是启用的),就需要执行上述命令,并把ta.key放到/etc/openvpn/server目录。配置文件中服务端第二个参数为0,同时客户端也要有此文件,且client.conf中此指令的第二个参数需要为1。(服务端有该配置,那么客户端也必须要有)

openvpn --genkey --secret ta.key

整理服务端证书


mkdir -p /etc/openvpn/server/
cp -a pki/ca.crt /etc/openvpn/server/
cp -a pki/private/server.key /etc/openvpn/server/
cp -a pki/issued/server.crt /etc/openvpn/server/
cp -a pki/dh.pem /etc/openvpn/server/
cp -a ta.key /etc/openvpn/server/

Ubunto版

整理这个版本,是因为OpenVPN是之前我成功配置的一个版本,我想知道它们的区别

Ubuntu版本相对比较简单,需要密码的地方都没有设置密码,而且版本比较旧,我就不整理了,毕竟我计划放弃Ubuntu。

参考资料

  1. 在Linux CentOS 7搭建OpenVPN服务与管理
  2. Ubuntu 搭建 OpenVPN 服务

目前的疑惑

  1. easy-ras下载地址是怎么得到的呢???GitHub的一种特性么,我看作者下载OpenVPN是也是用这种方法。