最近,我设置了一个树莓派之类的小服务器,用于进行一些网络练习,并在其上安装了 OpenVPN。对于示例证书,我使用了pivpn -a
OpenVPN 建议的命令。但现在我想创建自己的证书,因为我需要在其中插入一个到期日期作为示例。
在网上进行了大量研究之后,我没有找到任何可行的方法,因为用户提供的大多数示例都是旧版本的 OpenVPN,我唯一了解到的是我需要 openssl 来创建我的证书。
因此我运行以下命令来创建我的证书:
sudo openssl req -new -key ca.key > mycert.csr
sudo openssl x509 -req -days 1 -in ./mycert.csr /
-signkey /etc/openvpn/easy-rsa/pki/private/ca.key -out some.crt
证书密钥是我安装 OpenVPN 时生成的密钥,此时我尝试组合证书和密钥,如许多教程所建议的那样:
client
dev tun
proto udp
remote <my_server_ip> 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
tls-version-min 1.2
verify-x509-name <server_name> name
cipher AES-256-CBC
auth SHA256
auth-nocache
verb 3
<ca>
-----BEGIN CERTIFICATE-----
#my ca.crt
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
#the some.crt file, which i created before
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN ENCRYPTED PRIVATE KEY-----
#No idea what i have to write there
-----END ENCRYPTED PRIVATE KEY-----
</key>
<tls-crypt>
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
#my ta.key
-----END OpenVPN Static key V1-----
</tls-crypt>
我坚持这一点,因为在加密私钥有人说我必须在那里放置 client.key,所以我用该密钥来签署我的证书,但它不起作用。
我搞乱了一些步骤,或者这是实现我想要的目标的错误方法?
答案1
对于 OpenVPN,涉及多个证书:
在服务器端:
- 服务器证书(和密钥)
- 与私钥匹配的 CA 证书,用于签署服务器证书
在客户端(可选):
- 由同一或其他机构签名的客户端证书(和密钥)
您已发布客户端配置。因此需要填写的参数如下:
- ca:ca证书验证服务器证书(对服务器证书进行签名)
- cert:取决于服务器配置,客户端证书提供给服务器用于用户身份验证
- key:与证书匹配的密钥
我建议你使用easyrsa3。那里应该有足够详细的解释。
自己的 OpenVPN 服务器(以及自己的自定义 CA)的简短摘要:
- 生成 ca 证书(和密钥)
- 生成服务器证书(和密钥)
- 生成客户端证书(和密钥)
为了增强安全性,密钥在本地(在服务器/客户端上)与 CSR(证书请求)一起创建,然后在包含 ca 的节点上对请求进行签名(应该分开),从而产生证书。
编辑: 再看一下你的问题,这看起来很可疑:
sudo openssl req -new -key ca.key > mycert.csr
sudo openssl x509 -req -days 1 -in ./mycert.csr \
-signkey /etc/openvpn/easy-rsa/pki/private/ca.key -out some.crt
是什么第一的ca.key?你应该单独生成一个新的(客户端)密钥,或者干脆让openssl 请求为您完成此操作(-newkey
)。 openssl req 使用的“密钥”属于您要为其获取 CSR 的证书。此时它与 CA 无关。
概括:
- 创建私钥
- 为密钥创建 CSR
- 获取由 CA 签名的 csr(产生与第一步的私钥匹配的签名证书)
答案2
我必须在<tls-auth>
标签中添加 TLS 密钥并将其添加key-direction 1
到配置中才能使其工作(openVPN 2.5.8 x86_64-pc-linux-gnu)。
所以我的配置:
client
dev tun
proto udp
remote <my-server> 1194
resolv-retry infinite
nobind
persist-key
persist-tun
tls-client
key-direction 1
data-ciphers AES-256-GCM:AES-128-GCM
# Set log file verbosity.
verb 3
<ca>
-----BEGIN CERTIFICATE-----
# ca
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
# cert
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
# key
-----END PRIVATE KEY-----
</key>
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
# tls cert
-----END OpenVPN Static key V1-----
</tls-auth>