如何在免費 WiFi 中保護隱私(二)
安裝完服務器之后,下一步就是安裝和配置 0penVPN。
0penVPN 在兩點之間創建一個加密通道,阻止第三方訪問你的網絡流量數據。通過設置你的 “虛擬專用網絡” 服務,你可以成為你自己的 “虛擬專用網絡” 服務商。許多流行的 “虛擬專用網絡” 服務都使用 0penVPN,所以當你可以掌控自己的網絡時,為什么還要將你的網絡連接綁定到特定的提供商呢?
本系列的 第一篇文章 展示了如何安裝和配置一臺作為你的 0penVPN 服務器的 Linux 計算機。同時也講述了如何配置你的路由器以便你可以在外部網絡連接到你的服務器。
第二篇文章將演示根據 0penVPN wiki 給定的步驟安裝一個 0penVPN 服務軟件。
安裝 0penVPN
首先,使用包管理器安裝 0penVPN 和 easy-rsa
應用程序(幫助你在服務器上設置身份驗證)。本例使用的是 Fedora Linux,如果你選擇了不同的發行版,請選用合適的命令。
$ sudo dnf install openvpn easy-rsa
此操作會創建一些空目錄:
/etc/openvpn
/etc/openvpn/client
/etc/openvpn/server
如果這些目錄在安裝的過程中沒有創建,請手動創建它們。
設置身份驗證
0penVPN 依賴于 easy-rsa
腳本,并且應該有自己的副本。復制 easy-rsa
腳本和文件:
$ sudo mkdir /etc/openvpn/easy-rsa
$ sudo cp -rai /usr/share/easy-rsa/3/* /etc/openvpn/easy-rsa/
身份驗證很重要,0penVPN 非常重視它。身份驗證的理論是,如果 Alice 需要訪問 Bob 公司內部的私人信息,那么 Bob 確保 Alice 真的是 Alice 就至關重要。同樣的,Alice 也必須確保 Bob 是真正的 Bob。我們稱之為相互認證。
現有的最佳實踐是從三個可能因素中的選擇兩個檢查屬性:
- 你擁有的
- 你知道的
- 你是誰
選擇有很多。0penVPN 安裝使用如下:
- 證書:客戶端和服務端都擁有的東西
- 證書口令:某人知道的東西
Alice 和 Bob 需要幫助彼此來驗證身份。由于他們都相信 Cathy,Cathy 承擔了稱為 證書頒發機構(CA)的角色。Cathy 證明 Alice 和 Bob 都是他們自己。因為 Alice 和 Bob 都信任 Cathy,現在他們也相互信任了。
但是是什么讓 Cathy 相信 Alice 和 Bob 是真的 Alice 和 Bob?Cathy 在社區的聲譽取決于如何正確處理這件事,因此如果她希望 Denielle、Evan、Fiona、Greg 和其他人也信任她,她就需要嚴格測試 Alice 和 Bob 的宣稱內容。當 Alice 和 Bob 向 Cathy 證明了他們是真的 Alice 和 Bob 之后,Cathy 將向 Alice 和 Bob 簽署證書,讓他們彼此和全世界分享。
Alice 和 Bob 如何知道是 Cathy 簽署了證書,而不是某個人冒充她簽發了證書?他們使用一項叫做公鑰加密的技術:
- 找到一種用一個密鑰加密并用另一個密鑰解密的加密算法。
- 將其中一個設為私鑰,將另外一個設為公鑰。
- Cathy 與全世界分享她的公鑰和她的簽名的明文副本。
- Cathy 用她的私鑰加密她的簽名,任何人都可以用她分享的公鑰解密。
- 如果 Cathy 的簽名解密后與明文副本匹配,Alice 和 Bob 就可以相信 Cathy 確實簽署了它。
每次在線購買商品和服務時,使用的就是這種技術。
認證實現
0penVPN 的 文檔 建議在單獨的系統上或者至少在 0penVPN 服務器的單獨目錄上設置 CA。該文檔還建議分別從服務端和客戶端生成各自的證書。因為這是一個簡單的演示設置,你可以使用 0penVPN 服務器設置 CA,并將證書和密鑰放入服務器上的指定目錄中。
從服務端生成證書,并將證書拷貝到各個客戶端,避免客戶端再次設置。
此實現使用自簽名證書。這是因為服務器信任自己,而客戶端信任服務器。因此,服務器是簽署證書的最佳 CA。
在 0penVPN 服務器上設置 CA:
$ sudo mkdir /etc/openvpn/ca
$ cd /etc/openvpn/ca
$ sudo /etc/openvpn/easy-rsa/easyrsa init-pki
$ sudo /etc/openvpn/easy-rsa/easyrsa build-ca
使用一個易記難猜的密碼。
設置服務器密鑰對和認證請求:
$ cd /etc/openvpn/server
$ sudo /etc/openvpn/easy-rsa/easyrsa init-pki
$ sudo /etc/openvpn/easy-rsa/easyrsa gen-req OVPNserver2020 nopass
在此例中,OVPNServer2020
是你在本系列第一篇文章中為 0penVPN 服務器設置的主機名。
生成和簽署證書
現在你必須向 CA 發送服務器請求并生成和簽署服務器證書。
此步驟實質上是將請求文件從 /etc/openvpn/server/pki/reqs/OVPNserver2020.req
復制到 /etc/openvpn/ca/pki/reqs/OVPNserver2020.req
以準備審查和簽名:
$ cd /etc/openvpn/ca
$ sudo /etc/openvpn/easy-rsa/easyrsa \
import-req /etc/openvpn/server/pki/reqs/OVPNserver2020.req OVPNserver2020
審查并簽署請求
你已經生成了一個請求,所以現在你必須審查并簽署證書:
$ cd /etc/openvpn/ca
$ sudo /etc/openvpn/easy-rsa/easyrsa \
show-req OVPNserver2020
以服務器身份簽署請求:
$ cd /etc/openvpn/ca
$ sudo /etc/openvpn/easy-rsa/easyrsa \
sign-req server OVPNserver2020
將服務器和 CA 證書的副本放在它們所屬的位置,以便配置文件獲取它們:
$ sudo cp /etc/openvpn/ca/pki/issued/OVPNserver2020.crt \
/etc/openvpn/server/pki/
$ sudo cp /etc/openvpn/ca/pki/ca.crt \
/etc/openvpn/server/pki/
接下來,生成 Diffie-Hellman 參數,以便客戶端和服務器可以交換會話密鑰:
$ cd /etc/openvpn/server
$ sudo /etc/openvpn/easy-rsa/easyrsa gen-dh
快完成了
本系列的下一篇文章將演示如何配置和啟動你剛剛構建的 0penVPN 服務器。