昨天我家的ASUS RT-AC1500G PLUS突然無緣無故就自己恢復出廠預設,連帶其中的OpenVPN也必須重新配置。但好不容易配置好OpenVPN之後,要用手機測試連線,結果就因為TLS驗證錯誤而罷工。
後來我在手機端的OpenVPN(我裝的是這個,下文會說明)設定關閉TLS驗證…成功!因此確定問題就出在TLS驗證上。
雖然確定了問題所在,可是這個問題是我第一次遇到,所以一時毫無頭緒。總之就是一直鬼打牆,死活就是連不上。
最後是找到了這篇文章,根據文中的方法,終於讓OpenVPN恢復正常了。下面大概介紹一下怎麼做:
- 點此下載最新版的easy-rsa;點進去後找右邊Release(手機版是往下拉),選latest的下載
一般選win64的即可(64位元Windows);win32是32位元的。 - 解壓縮前一步下載的壓縮檔,得到EasyRSA-(版本)資料夾
- 打開後,雙擊執行EasyRSA-Start.bat,執行EasyRSA
- 然後依序執行下面這些指令:
./easyrsa init-pki
./easyrsa build-ca
./easyrsa build-server-full server nopass
./easyrsa build-client-full client nopass
./easyrsa gen-dh
之後就會在EasyRSA資料夾下產生一個pki資料夾,裡面就是前面產生的憑證。
我們要用的檔案有這些:
- pki\ca.crt:CA憑證
- pki\issued\server.crt:OpenVPN的伺服器憑證
- pki\private\server.key:伺服器憑證對應的私鑰
- pki\dh.pem:Diffie Hellman 參數
- pki\issued\client.crt:OpenVPN的用戶端憑證
- pki\private\client.key:用戶端憑證對應的私鑰
接著登入ASUS路由器的後台(網址列貼上router.asus.com,打路由器的IP亦可),依序點選VPN→切換到OpenVPN→開啟OpenVPN伺服器,然後點選套用本頁面設定。這一步是開啟路由器的OpenVPN伺服器。
然後在VPN詳細設定切換為進階設定,找到驗證模式(預設為TLS)。點選旁邊的黃字「金鑰與驗證內容修改」(重點在這裡!)。
以下是各欄位要貼入的內容對照:
- 驗證授權-貼入pki\ca.crt所有內容
- 伺服器驗證-貼入pki\issued\server.crt最末端的內容(從—–BEGIN CERTIFICATE—–開始複製)
- 伺服器金鑰-貼入pki\private\server.key所有內容
- Diffie Hellman 參數-貼入pki\dh.pem所有內容
全都填入後即可點選儲存,最後點選套用本頁面設定即可。然後可以視需要新增登入帳號密碼。
全部設定完成後切換回一般設定,點選匯出OpenVPN設定檔。
這時候先別急著把設定檔匯入!因為這個設定檔沒有用戶端憑證與私鑰,需要自己加入(我遇到的問題就是出在這)。
使用記事本或其它類似軟體打開client.ovpn,找到<cert>段落,將pki\issued\client.crt最末端的內容複製進去;然後下面的<key>段落則是貼入pki\private\client.key所有內容,最後存檔。
最後將這個設定檔匯入OpenVPN用戶端,就可以順利連線到路由器的VPN了。
關於我使用的OpenVPN用戶端
前面我提到自己使用的OpenVPN用戶端,大家點進去之後應該會發現:這個不是OpenVPN官方出的App,而是第三方開發的。
我之所以會使用這個用戶端,有以下兩個原因:
- 官方App會卡在安全性過低而拒絕連線:出於這個原因,我只能找第三方的用戶端來pass掉這個限制。不過現在已經找到根本原因,就是因為憑證演算法選的是SHA-1。這次我順便把它改成SHA-256,從此不論是官方或第三方都能愉快連線了。
- 支援手機的快速面板:我的手機是三星的A13,其中一個我覺得很方便的功能就是快速面板,可以在上面放一些常用的功能按鈕。我用的OpenVPN第三方用戶端正好就支援這一功能,可以「一鍵連線VPN」。官方版就沒有這個功能。