配置OpenVPN 2.0的第一步是建立一个PKI(public key infrastructure 公钥基础设施)。PKI包括:

  • 一个认证机构(CA)的证书和私钥,用来为每一个服务端和客户端颁发证书(sign each of the server and client certificates)。
  • 服务端和每个客户端都有一个证书(也称做公钥)和私钥

OpenVPN 支持基于证书的双向认证,也就是说客户端需认证服务端,服务端也要认证客户端,

服务端和客户端验证对方的第一步是验证对方提供的证书是由认证机构(CA)颁发的。然后测试第一步认证通过的证书的头部信息,如:证书的common name,证书的类型(客户端还是服务端)。

从VPN的观点来看,这一安全模式满足一系列要求:

服务端仅仅需要它自己的证书/私钥对 -- 它不需要知道客户端的证书。 服务端仅仅接受拥有CA颁发的证书的客户端。因为服务端检查证书是否由CA颁发时并不需要访问 CA的私钥,这样就可以将CA的私钥(整个PKI中最重要的私钥)放在另一台机子上。 如果一个私钥(is compromised),通过将它的证书加入CRL(证书吊销列表)可以禁止这一私钥。 CRL允许有选择地拒绝compromised 证书而不需要重建整个PKI。 基于嵌入的证书域比如Vommon Name,服务端能够加强客户端待定(client-specific)访问权限 (access fights)。

1. EasyRsa 配置

1.1.1. 软件目录配置

tar xf EasyRSA-3.0.4.tgz
mv EasyRSA-3.0.4.tgz /usr/local/openvpn/EasyRSA
cd /usr/local/openvpn/EasyRSA
cp vars.example vars
vim vars

使用yum安装/usr/share/easy-rsa

yum install openvpn easy-rsa

1.1.2. 编辑vars文件

set_var EASYRSA_REQ_COUNTRY "CN"
set_var EASYRSA_REQ_PROVINCE "ZheJiang"
set_var EASYRSA_REQ_CITY "HangZhou"
set_var EASYRSA_REQ_ORG "test ORG"
set_var EASYRSA_REQ_EMAIL "admin@zhaowenyu.com"
set_var EASYRSA_REQ_OU "vinnyzhao"

2. 证书制作

2.1.1. 自建CA认证体系

1、初始化证书管理目录 进入/etc/openvpn/easy-rsa/easyrsa3/目录初始化:

./easyrsa init-pki

例如

[root@iZ6weg3o2z16n75lqwmk3sZ 3.0.3]# ./easyrsa init-pki
Note: using Easy-RSA configuration from: ./vars
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /usr/share/easy-rsa/3.0.3/pki

这一步会使用当前目录下vars文件作为配置文件进行初始化,并在当前目录下生产一个pki目录

2、创建根证书

./easyrsa build-ca

这一步是构建CA根证书,要求输入一个证书加密密码和一个common name(证书名称)字符串 注意:在上述部分需要输入PEM密码 PEM pass phrase,输入两次,此密码必须记住,不然以后不能为证书签名。还需要输入common name 通用名,这个你自己随便设置个独一无二的。

2.1.2. 服务端证书构建

1、创建服务器端证书请求,生成证书请求文件

./easyrsa gen-req server nopass

创建服务端证书,需要输入证书的一个名称(common name),最好是有意义的名称,例如:business_server1。这样就会在pki目录生产对应的服务端证书. 该过程中需要输入common name,随意但是不要跟之前的根证书的一样

2、CA认证颁发服务端证书

./easyrsa sign server server

该命令中.需要你确认生成,要输入yes,还需要你提供我们当时创建CA时候的密码。如果你忘记了密码,那你就重头开始再来一次吧。

3、创建Diffie-Hellman,确保key穿越不安全网络的命令:

./easyrsa gen-dh

生成高强度的秘钥,需要几分钟。

2.1.3. 创建客户端证书

1、创建客户端正确请求文件

./easyrsa gen-req client001

需要输出一个密码

2、导入req

./easyrsa import-req /root/client/easy-rsa/easyrsa3/pki/reqs/qingliu.req qingliu

没有创建对应的client目录的时候,需要导入,如果是在和CA、Server同一个目录时,不用导入了。

3、签约证书

./easyrsa sign client  client001

这里生成client所以必须为client,client001要与之前导入名字一致

上面签约证书跟server类似,就不截图了,但是期间还是要输入CA的密码

以上步骤生成的pki文件

pki
├── ca.crt
├── certs_by_serial
│ ├── 442DAC7F32744739A2172C31B6610834.pem
│ └── E2C7B58F473A55C20BDF8E64E5CCCC40.pem
├── dh.pem
├── index.txt
├── index.txt.attr
├── index.txt.attr.old
├── index.txt.old
├── issued
│ ├── client001.crt
│ └── server.crt
├── private
│ ├── ca.key
│ ├── client001.key
│ └── server.key
├── reqs
│ ├── client001.req
│ └── server.req
├── serial
└── serial.old
Copyright © 温玉 2021 | 浙ICP备2020032454号 all right reserved,powered by Gitbook该文件修订时间: 2022-01-02 10:58:02

results matching ""

    No results matching ""