跳轉到內容

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]
華夏公益教科書