LPI Linux 认证/OpenVPN
(LPIC-2 版本 4.5)
权重 2
描述: 候选人应能够配置 VPN(虚拟专用网络)并创建安全点对点或站点到站点连接。
关键知识领域
- OpenVPN
术语和实用程序
/etc/openvpn/
openvpn
OpenVPN 是一种虚拟专用网络 (VPN) 系统,它实施技术以在路由或桥接配置以及远程访问设施中创建安全的点对点或站点到站点连接。它实现客户端和服务器应用程序。官方网站是 openvpn.net。
由于持续开发,网络上提供的许多关于 OpenVPN 的信息已无法使用。本书旨在根据目前可用的软件提供帮助。这并不意味着最新的软件是描述的基础。如果可能,此处会提到使用的版本。描述应尽可能避免使用技术术语。任何人都可以在这里添加和修改内容。
sudo apt-get install network-manager-openvpn network-manager-openvpn-gnome
可执行文件可在 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。OpenVPN 会安装一些文件夹和文件。如果要将其安装到 C:\Program Files
,则需要管理员权限,或者需要在 /OpenVPN
文件夹中授予所有人写入权限。但是,将 OpenVPN 安装到 C:\OpenVPN
中可以减少问题和意外情况。
如果您需要实现最高安全性,则必须在没有网络连接(更不用说互联网连接)的计算机上生成密钥和证书,并且将来永远不会再这样做。证书 (*.crt) 和关联的私钥 (*.key) 永远不应该通过相同的方式传输。私钥 (*.key) 每次只能位于一个地方。将 key
比作您的信用卡,将 crt
比作您的信用卡 PIN[1]。
可以使用 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 安装在具有完全写入权限的文件夹中。核心密钥和证书的生成方式如下
- 转到
C:\OpenVPN\easy-rsa
。运行EasyRSA-Start.bat
./easyrsa init-pki
将创建一个新的 pki 文件夹。./easyrsa build-ca
在这里,您需要输入一个密码,称为密码短语,以及服务器名称。对于服务器名称,您可以使用方括号中的默认名称 “fooCore” 或其他名称。您将获得文件...\pki\ca.crt
和...\pki\private\ca.key
。这些文件是所有其他生成的核心文件。不要丢失它们,并将它们放在安全的地方。如果您丢失了对 CA 私钥的控制权,您将不再信任任何证书。
用于服务器的密钥和证书文件使用以下命令生成。“server1” 可以替换为任何其他名称
./easyrsa gen-req server1 nopass
使用nopass
,因为通常无法在服务器上使用密码。
将生成以下文件:.../pki/reqs/server1.req
、.../pki/private/server1.key
。./easyrsa sign-req server server1
将生成server1.crt
。./easyrsa gen-dh
将生成.../pki/dh.pem
。
- 或者,可以使用一个命令处理之前的命令
./easyrsa build-server-full server1
此外,还需要用于客户端设备的密钥和证书文件。“client1” 可以替换为任何其他名称。
./easyrsa build-client-full client1
将生成以下文件:...\pki\reqsclient1.req
、...\pki\privateclient1.key
和...\pki/issued/client1.crt
。