一、准备工作
下载easy-rsa 3,并进入easyrsa3/
子目录,修改var文件。。
git clone https://github.com/OpenVPN/easy-rsa.git
vars 文件范例
cat vars |grep -v '#' |sed '/^$/d'
if [ -z "$EASYRSA_CALLER" ]; then
echo "You appear to be sourcing an Easy-RSA 'vars' file." >&2
echo "This is no longer necessary and is disallowed. See the section called" >&2
echo "'How to use this file' near the top comments for more details." >&2
return 1
fi
set_var EASYRSA_DN "org"
set_var EASYRSA_REQ_COUNTRY "CN"
set_var EASYRSA_REQ_PROVINCE "Shanghai"
set_var EASYRSA_REQ_CITY "HuangPu"
set_var EASYRSA_REQ_ORG "RHAssurance"
set_var EASYRSA_REQ_EMAIL "myname@mycomanpy.com"
set_var EASYRSA_REQ_OU "RHA"
set_var EASYRSA_NS_SUPPORT "yes"
关于
set_var EASYRSA_NS_SUPPORT "yes"
如果openvpn client的配置文件中使用了ns-cert-type server则要打开此选项,制作server证书时会将一些信息写入证书,如不打开此选项,则openvpn client会提示server certificate verify fail
二、配置生成证书
- 初始化 PKI
./easyrsa init-pki
- 创建 CA 证书,
nopass 配置无密码。
./easyrsa build-ca nopass
生产环境建议设置密码。在生成证书、密钥的时候,会要求输入该CA密钥的密码。
- 生成服务器证书、密钥
./easyrsa build-server-full servername nopass
- 生成客户端证书、密钥
./easyrsa build-client-full clientname nopass
- 生成 Diffie Hellman parameters
执行如下,生成文件 easyrsa3/pki/dh.pem :
./easyrsa gen-dh
- 密钥生成过程的最后一步,是将所有文件复制到需要的机器上,注意密钥文件需要通过安全通道复制。
OpenVPN 需要 ca, cert, key, and dh parameters。
Question:
如果没有 安全通道 复制文件,就不能建立 PKI 了吗?
Answer:
当然可以。
上例中,为了简洁起见,我们在同一个位置生成了所有私钥。我们还可以做的更好。
例如,我们选择不在服务器上生成客户端证书和密钥,而是客户端在本地生成自己的私钥,然后向密钥签名机提交证书签名请求(CSR)。再然后,密钥签名机处理CSR并将签名的证书返还客户端。
这种方式,甚至 secret.key无需离开生成它的硬盘,就可以完成。
Setting Up Your Own Certificate Authority (CA) | OpenVPN
CA Certificate Management | OpenVPN
三、附录 X509 PKI
rfc5280 - X.509 PKI
+---+
| C | +------------+
| e | <-------------------->| End entity |
| r | Operational +------------+
| t | transactions ^
| i | and management | Management
| f | transactions | transactions PKI
| i | | users
| c | v
| a | ======================= +--+------------+ ==============
| t | ^ ^
| e | | | PKI
| | v | management
| & | +------+ | entities
| | <---------------------| RA |<----+ |
| C | Publish certificate +------+ | |
| R | | |
| L | | |
| | v v
| R | +------------+
| e | <------------------------------| CA |
| p | Publish certificate +------------+
| o | Publish CRL ^ ^
| s | | | Management
| i | +------------+ | | transactions
| t | <--------------| CRL Issuer |<----+ |
| o | Publish CRL +------------+ v
| r | +------+
| y | | CA |
+---+ +------+
Figure 1. PKI Entities