使用证书和密钥创建自己的 ovpn 文件

使用证书和密钥创建自己的 ovpn 文件

最近,我设置了一个树莓派之类的小服务器,用于进行一些网络练习,并在其上安装了 OpenVPN。对于示例证书,我使用了pivpn -aOpenVPN 建议的命令。但现在我想创建自己的证书,因为我需要在其中插入一个到期日期作为示例。

在网上进行了大量研究之后,我没有找到任何可行的方法,因为用户提供的大多数示例都是旧版本的 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>

相关内容