跳转到内容

LPI Linux 认证/OpenVPN

来自维基教科书,开放世界中的开放书籍
(从 OpenVPN 重定向)

详细目标 (212.5)

[编辑 | 编辑源代码]

(LPIC-2 版本 4.5)


权重 2


描述: 候选人应该能够配置 VPN (虚拟专用网络) 并创建安全的点对点或站点到站点的连接。


关键知识领域

  • OpenVPN


术语和工具

  • /etc/openvpn/
  • openvpn

OpenVPN 是一个虚拟专用网络 (VPN) 系统,它实现了一些技术来在路由或桥接配置中创建安全的点对点或站点到站点的连接以及远程访问设施。它同时实现客户端和服务器应用程序。官方网站是 openvpn.net。

由于持续的开发,许多在网上可获得的关于 OpenVPN 的信息已不再可用。这本书旨在提供基于当前可用软件的帮助。这并不意味着最新软件是描述的基础。如果可能,这里提到了所使用的版本。描述应尽量避免使用专业术语。任何人都可以在这里添加和修改内容。

在 Linux 上

[编辑 | 编辑源代码]
sudo apt-get install network-manager-openvpn network-manager-openvpn-gnome

在 Windows 上

[编辑 | 编辑源代码]

可执行文件可在 https://openvpn.net/community-downloads 获得。

请注意,对于 64 位系统,32 位二进制文件无法正常运行。您需要 64 位可执行文件。例如,对于 Windows,使用 OpenVPN-2.5.7-I602-amd64.msi。以下说明已使用 OpenVPN 2.5.7 版本测试。

如果只需要创建密钥,那么使用这些文件就足够了:https://github.com/OpenVPN/easy-rsa/releases.

例如:EasyRSA-3.1.0-win64.zip

在安装过程中,安装程序会询问您选择快速安装或自定义安装。使用自定义安装。特别是,点击所有扩展程序进行安装。如果您想创建证书,则需要安装 easyrsa。OpenVPN 会安装一些文件夹和文件。如果您想将它安装在 C:\Program Files 中,则需要管理员权限,或者您需要为 /OpenVPN 文件夹中的所有人授予写入权限。但是,将 OpenVPN 安装在 C:\OpenVPN 中会导致最少的麻烦和意外问题。

创建密钥和证书

[编辑 | 编辑源代码]

如果您需要实现最高安全性,则必须在没有网络连接,更不用说互联网连接的计算机上生成密钥和证书,并且将来永远不会再进行连接。证书 (*.crt) 和关联的私钥 (*.key) 永远不应该通过同一条路径传输。私钥 (*.key) 应该一次只存在于一个地方。将 key 比作您的信用卡,而 crt 比作您的信用卡 PIN[1].

在 Windows 上

[编辑 | 编辑源代码]

可以使用 OpenSSL 轻松生成密钥和证书。OpenSSL 不是 Windows 的一部分。OpenSSL 也不是作为一个单独的软件包提供的。但是,可用的 OpenSSL 是某些软件包的一部分。在 C: 文件夹中搜索 "openssl.exe" 可以查看 OpenSSL 是否已在其他时间安装。Git 使用最新的 OpenSSL。但是,例如 OpenVPN 也包含 OpenSSL。当您找到 openssl.exe 时,双击它;如果没有出现错误消息,则它已经是可用的命令行。如果它不存在,请安装例如 OpenVPN 软件。

证书和密钥应保存在一个明确的位置。可以为此创建文件夹,如下所示:C:/myvpnfiles

将一个配置文件 myopenssl.cnf 放入此文件夹,以下是最小内容

[req]
distinguished_name = req_distinguished_name
[req_distinguished_name]
[v3_req]
核心密钥和证书

首先,需要创建中心秘密核心 RSA 密钥。此外,必须输入两次密码短语,并且必须记住它。

genrsa -aes256 -out C:/myvpnfiles/ca.key 2048 

之后,可以创建证书

req -new -x509 -sha256 -days 36500 -key C:/myvpnfiles/ca.key -subj '/CN=fooCore' -out C:/myvpnfiles/ca.crt -config C:/myvpnfiles/myopenssl.cnf

这些生成 RSA 密钥和证书的步骤需要针对服务器和客户端重复。

服务器

上面的这两个命令也可以合并成一个语句。使用 -noip 还为服务器指定了此处未分配密码短语。密码短语需要在服务器上采取特殊措施,并且没有必要,因为服务器是我们拥有的。

req -newkey rsa:2048 -nodes -subj '/CN=fooServer1' -keyout C:/myvpnfiles/server1.key -out C:/myvpnfiles/server1.csr -config C:/myvpnfiles/myopenssl.cnf

现在需要验证证书

x509 -req -sha256 -CA C:/myvpnfiles/ca.crt -CAkey C:/myvpnfiles/ca.key -days 36500 -in C:/myvpnfiles/server1.csr -CAcreateserial -out C:/myvpnfiles/server1.crt
客户端

对于客户端,步骤与服务器相同。但是,这里分配了最终用户密码短语。因为客户端文件将提供给其他人。如果这些文件意外落入错误的人手中,那么在没有密码短语的情况下,它们将毫无用处。

req -newkey rsa:2048 -subj '/CN=fooClient1' -keyout C:/myvpnfiles/client1.key -out C:/myvpnfiles/client1.csr -config C:/myvpnfiles/myopenssl.cnf
x509 -req -sha256 -CA C:/myvpnfiles/ca.crt -CAkey C:/myvpnfiles/ca.key -days 36500 -in C:/myvpnfiles/client1.csr -CAcreateserial -out C:/myvpnfiles/client1.crt

对于更多客户端,这些步骤需要使用名称 client2 或其他名称重复。

附加内容

对于服务器,需要额外的 Diffie Hellmann 参数用于加密传输。这些值存储在一个 dh.pem 文件中。这只是一个参数文件,对于先前生成的密钥或证书来说,它不是必需的。

dhparam -out C:/myvpnfiles/dh.pem 2048

同一个 dh 文件可以用于多个服务器,因为这些值仅用于软件支持。

前提条件是 OpenVPN 已安装在具有完整写入权限的文件夹中。核心密钥和证书的生成方式如下

  1. 转到 C:\OpenVPN\easy-rsa。运行 EasyRSA-Start.bat
  2. ./easyrsa init-pki 将创建一个新的 pki 文件夹。
  3. ./easyrsa build-ca 在这里您需要输入一个密码,称为密码短语,以及一个服务器名称。对于服务器名称,您可以使用方括号中的默认名称 "fooCore" 或其他名称。您将获得文件 ...\pki\ca.crt...\pki\private\ca.key。这些文件是所有其他生成的核心文件。不要丢失它们,并将它们保存在安全的地方。如果您丢失了对 CA 私钥的控制,则将无法再信任任何证书。

使用以下命令生成服务器的密钥和证书文件。"server1" 可以替换为任何其他名称

  1. ./easyrsa gen-req server1 nopass 使用 nopass,因为通常无法在服务器上使用密码。
    将生成以下文件:.../pki/reqs/server1.req.../pki/private/server1.key
  2. ./easyrsa sign-req server server1 生成 server1.crt
  3. ./easyrsa gen-dh 生成 .../pki/dh.pem
或者,之前的所有命令都可以通过一个命令处理
./easyrsa build-server-full server1

此外,还需要客户端设备的密钥和证书文件。"client1" 可以替换为任何其他名称。

  1. ./easyrsa build-client-full client1 将生成以下文件:...\pki\reqsclient1.req...\pki\privateclient1.key...\pki/issued/client1.crt



参考资料

[edit | edit source]
华夏公益教科书