參考鏈接:搭建基於證書認證登陸的Open×××服務器html
用easyrsa3來製做證書node
Open×××項目組
linux
推薦閱讀:open***服務器&客戶端配置git
Open×××2.4.3 安裝部署文檔(實戰)github
利open×××自帶的http-proxy突破防火牆的封鎖windows
1、Open×××簡介
api
Open××× 是一個基於 OpenSSL 庫的應用層 ××× 實現。和傳統 ××× 相比,它的優勢是簡單易用。安全
Open×××容許參與創建×××的單點使用共享金鑰,電子證書,或者用戶名/密碼來進行身份驗證。它大量使用了OpenSSL加密庫中的SSLv3/TLSv1 協議函式庫。Open×××能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X與Windows 2000/XP/Vista上運行,幷包含了許多安全性的功能。它並非一個基於Web的×××軟件,也不與IPsec及其餘×××軟件包兼容。
Open×××2.0後引入了用戶名/口令組合的身份驗證方式,它能夠省略客戶端證書,可是仍有一份服務器證書須要被用做加密。 Open×××全部的通訊都基於一個單一的IP端口, 默認且推薦使用UDP協議通信,同時TCP也被支持。Open×××鏈接能經過大多數的代理服務器,而且可以在NAT的環境中很好地工做。服務端具備向客 戶端「推送」某些網絡配置信息的功能,這些信息包括:IP地址、路由設置等。Open×××提供了兩種虛擬網絡接口:通用Tun/Tap驅動,經過它們, 能夠創建三層IP隧道,或者虛擬二層以太網,後者能夠傳送任何類型的二層以太網絡數據。傳送的數據可經過LZO算法壓縮。在選擇協議時候,須要注意2個加密隧道之間的網絡情況,若有高延遲或者丟包較多的狀況下,請選擇TCP協議做爲底層協議,UDP協議因爲存在無鏈接和重傳機制,致使要隧道上層的協議進行重傳,效率很是低下。
2、Open×××的安裝
Open×××服務器
內網地址:10.124.151.251
外網地址:***.apicloud.com
***網段:10.124.163.0/24
系統環境:Centos6.9
本地客戶端
網段:192.168.0.0
本機IP:192.168.13.5
1. 安裝前準備工做:
setenforce 0 #關閉SELinux yum install epel-release-6-8.noarch -y #安裝epel第三方源 sysctl -w net.ipv4.ip_forward=1 #開啓服務器端路由轉發功能
2. 配置防火牆iptables:
#開通open***監聽端口對外開放 -A INPUT -p udp -m multiport --dports 1194 -j ACCEPT #設置NAT轉發,保證×××地址池可路由出外網(二選一,第一個是按照本地監聽地址配置,第二個是按照本地網卡名稱配置) -A POSTROUTING -s 10.124.163.0/24 -j SNAT --to-source 10.124.151.251 #-A POSTROUTING -s 10.124.163.0/24 -o eth0 -j MASQUERADE
3. 使用yum安裝open***:
yum install open*** open***-devel -y #這裏使用yum最新版2.4.6
4. 查看yum安裝open***具體安裝的文件列表
rpm -ql open*** /etc/open*** /etc/rc.d/init.d/open*** /usr/lib64/open*** /usr/lib64/open***/plugin /usr/lib64/open***/plugin/lib /usr/lib64/open***/plugin/lib/open***-auth-pam.so /usr/lib64/open***/plugin/lib/open***-down-root.so /usr/lib64/open***/plugins /usr/lib64/open***/plugins/open***-plugin-auth-pam.so /usr/lib64/open***/plugins/open***-plugin-down-root.so /usr/sbin/open*** /usr/share/doc/open***-2.4.6 /usr/share/doc/open***-2.4.6/AUTHORS /usr/share/doc/open***-2.4.6/COPYING /usr/share/doc/open***-2.4.6/COPYRIGHT.GPL /usr/share/doc/open***-2.4.6/ChangeLog /usr/share/doc/open***-2.4.6/Changes.rst /usr/share/doc/open***-2.4.6/README /usr/share/doc/open***-2.4.6/README.auth-pam /usr/share/doc/open***-2.4.6/README.down-root /usr/share/doc/open***-2.4.6/contrib /usr/share/doc/open***-2.4.6/contrib/OCSP_check /usr/share/doc/open***-2.4.6/contrib/OCSP_check/OCSP_check.sh /usr/share/doc/open***-2.4.6/contrib/README /usr/share/doc/open***-2.4.6/contrib/open***-fwmarkroute-1.00 /usr/share/doc/open***-2.4.6/contrib/open***-fwmarkroute-1.00/README /usr/share/doc/open***-2.4.6/contrib/open***-fwmarkroute-1.00/fwmarkroute.down /usr/share/doc/open***-2.4.6/contrib/open***-fwmarkroute-1.00/fwmarkroute.up /usr/share/doc/open***-2.4.6/contrib/pull-resolv-conf /usr/share/doc/open***-2.4.6/contrib/pull-resolv-conf/client.down /usr/share/doc/open***-2.4.6/contrib/pull-resolv-conf/client.up /usr/share/doc/open***-2.4.6/management-notes.txt /usr/share/doc/open***-2.4.6/sample /usr/share/doc/open***-2.4.6/sample/sample-config-files /usr/share/doc/open***-2.4.6/sample/sample-config-files/README /usr/share/doc/open***-2.4.6/sample/sample-config-files/client.conf /usr/share/doc/open***-2.4.6/sample/sample-config-files/firewall.sh /usr/share/doc/open***-2.4.6/sample/sample-config-files/home.up /usr/share/doc/open***-2.4.6/sample/sample-config-files/loopback-client /usr/share/doc/open***-2.4.6/sample/sample-config-files/loopback-server /usr/share/doc/open***-2.4.6/sample/sample-config-files/office.up /usr/share/doc/open***-2.4.6/sample/sample-config-files/open***-shutdown.sh /usr/share/doc/open***-2.4.6/sample/sample-config-files/open***-startup.sh /usr/share/doc/open***-2.4.6/sample/sample-config-files/roadwarrior-client.conf /usr/share/doc/open***-2.4.6/sample/sample-config-files/roadwarrior-server.conf /usr/share/doc/open***-2.4.6/sample/sample-config-files/server.conf /usr/share/doc/open***-2.4.6/sample/sample-config-files/static-home.conf /usr/share/doc/open***-2.4.6/sample/sample-config-files/static-office.conf /usr/share/doc/open***-2.4.6/sample/sample-config-files/tls-home.conf /usr/share/doc/open***-2.4.6/sample/sample-config-files/tls-office.conf /usr/share/doc/open***-2.4.6/sample/sample-config-files/xinetd-client-config /usr/share/doc/open***-2.4.6/sample/sample-config-files/xinetd-server-config /usr/share/doc/open***-2.4.6/sample/sample-scripts /usr/share/doc/open***-2.4.6/sample/sample-scripts/auth-pam.pl /usr/share/doc/open***-2.4.6/sample/sample-scripts/bridge-start /usr/share/doc/open***-2.4.6/sample/sample-scripts/bridge-stop /usr/share/doc/open***-2.4.6/sample/sample-scripts/ucn.pl /usr/share/doc/open***-2.4.6/sample/sample-scripts/verify-cn /usr/share/doc/open***-2.4.6/sample/sample-windows /usr/share/doc/open***-2.4.6/sample/sample-windows/sample.o*** /usr/share/man/man8/open***.8.gz /var/lib/open*** /var/run/open***
其中:
/usr/share/doc/open***-2.4.6/sample/sample-config-files/server.conf #服務端配置文件模板 /usr/share/doc/open***-2.4.6/sample/sample-config-files/client.conf #Linux平臺客戶端配置模板 /usr/share/doc/open***-2.4.6/sample/sample-windows/sample.o*** #Windows平臺客戶端配置模板
下面兩行是運行在預共享的靜態密鑰下的示例配置文件:
/usr/share/doc/open***-2.4.6/sample/sample-config-files/static-home.conf /usr/share/doc/open***-2.4.6/sample/sample-config-files/static-office.conf
下面兩行是運行在SSL/TLS模式下的示例配置文件:
/usr/share/doc/open***-2.4.6/sample/sample-config-files/tls-home.conf /usr/share/doc/open***-2.4.6/sample/sample-config-files/tls-office.conf
3、Open×××的配置
1. 首先把主要配置文件複製到/etc/open***:
cp /usr/share/doc/open***-2.4.6/sample/sample-config-files/server.conf /etc/open***
# grep -Ev "^$|^[#;]" /etc/open***/server.conf port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key # This file should be kept secret dh dh2048.pem server 10.124.163.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "route 10.0.0.0 255.0.0.0" push "dhcp-option DNS 223.5.5.5" push "dhcp-option DNS 223.6.6.6" client-to-client keepalive 10 120 tls-auth ta.key 0 # This file is secret cipher AES-256-CBC comp-lzo user nobody group nobody persist-key persist-tun status /var/log/open***/open***-status.log log /var/log/open***/open***.log log-append /var/log/open***/open***.log verb 3 explicit-exit-notify 1
附註:
配置文件參數解析
注:可按照默認模板配置,本例爲自定義配置文件,";"還有"#"開頭的是註釋 -------------------------- # 設置監聽IP,默認是監聽全部IP ;local a.b.c.d # 設置監聽端口,必需要對應的在防火牆裏面打開 port 1194 # 設置用TCP仍是UDP協議?(用UDP會比較快些) ;proto tcp proto tcp # 設置建立tun的路由IP通道,仍是建立tap的以太網通道路,因爲IP容易控制,因此推薦使用tun;但若是IPX等必須使用第二層才能經過的通信,則能夠用tap方式,tap也就是以太網橋接 ;dev tap dev tun # Windows服務端須要給網卡一個名稱,linux不須要 ;dev-node MyTap # 這裏是重點,必須指定SSL/TLS root certificate (ca),certificate(cert), and private key (key),ca文件是服務端和客戶端都必須使用的,但不須要ca.key,服務端和客戶端指定各自的.crt和.key,請注意路徑,可使用以配置文件開始爲根的相對路徑,也可使用絕對路徑,請當心存放.key密鑰文件 ca /usr/share/doc/open***-2.3.7/sample/sample-keys/ca.crt cert /usr/share/doc/open***-2.3.7/sample/sample-keys/server.crt key /usr/share/doc/open***-2.3.7/sample/sample-keys/server.key # 指定Diffie hellman parameters. dh /usr/share/doc/open***-2.3.7/sample/sample-keys/dh2048.pem # 配置服務器模式和×××使用的網段,Open×××會自動提供基於該網段的DHCP服務,但不能和任何一方的局域網段重複,×××服務器將會把10.8.0.1留給本身,其他的分配給×××客戶端,每個客戶端都會從10.8.0.1這個IP到達Open***服務端,若是使用dev tap模式,則須要註釋掉該指令。 server 10.8.0.0 255.255.255.0 # 維持一個客戶端和virtual IP的對應表,以方便客戶端從新鏈接能夠得到一樣的IP ifconfig-pool-persist ipp.txt # 配置爲以太網橋模式(dev tap),但須要使用系統的橋接功能,這裏不須要使用 ;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100 # 爲客戶端建立對應的路由,以另其通達公司網內部服務器,但記住,公司網內部服務器也須要有可用路由返回到客戶端,這裏主要填寫open***所在局域網的網段,個人open***所在的局域網是10.0.0.0,若是你的open***所在的局域網是其餘的網段,下面請填寫其餘網段,能夠填寫多個網段。 ;push "route 192.168.20.0 255.255.255.0" push "route 10.0.0.0 255.255.255.0" # 若客戶端但願全部的流量都經過×××傳輸,則可使用該語句,其會自動改變客戶端的網關爲×××服務器,推薦關閉,一旦設置,請當心服務端的DHCP設置問題,若是須要抓取因此鏈接×××客戶端的流量信息,須要開啓,這就是網絡上面所說的×××。 ;push "redirect-gateway def1 bypass-dhcp" 全部數據都經過××× # 用Open×××的DHCP功能爲客戶端提供指定的DNS、WINS等 push "dhcp-option DNS 114.114.114.114" ;push "dhcp-option WINS 10.8.0.1" # 默認客戶端之間是不能直接通信的,除非把下面的語句註釋掉 client-to-client # 若是您但願有相同Common Name的客戶端均可以登錄,也能夠註釋下面的語句,推薦每一個客戶端都使用不用的Common Name,開啓的話,一個證書能夠多個客戶端鏈接 ;duplicate-cn # 設置服務端檢測的間隔和超時時間 keepalive 10 120 # 使用lzo壓縮的通信,服務端和客戶端都必須配置 comp-lzo # 設置最大用戶數 ;max-clients 100 # 讓Open×××以nobody用戶和組來運行(安全) ;user nobody ;group nobody #持續選項會盡可能避免訪問某些資源的從新啓動可能不能夠由於特權的降級。 persist-key persist-tun # 輸出短日誌,每分鐘刷新一次,以顯示當前的客戶端 status /var/log/open***/open***-status.log # 缺省日誌會記錄在系統日誌中,但也能夠導向到其餘地方建議調試的使用先不要設置,調試完成後再定義,只能使用其中的一個,log會每次啓動前先清楚日誌,log-append會對數據追加 ;log /var/log/open***/open***.log log-append /var/log/open***/open***.log # 設置日誌的級別 verb 3
2. 生成證書
涉及到證書生成,請參考下面的文章:
4、Open×××的啓動
1.啓動命令
service open*** {start|stop|restart|condrestart|reload|reopen|status}
2.日誌路徑:若是/var/log/open***/ 不存在,可能須要建立
mkdir -p /var/log/open***/ /var/log/open***/ ├── open***.log #啓動運行日誌 └── open***-status.log #記錄當前哪個客戶端鏈接的狀態
5、客戶端的安裝
這裏記錄Windows客戶端的安裝和配置
1. 2.4.6客戶端安裝包下載地址:
https://softpedia-secure-download.com/dl/c140a1a4e8771e05455151d1ec61e793/5b029341/100090870/software/security/open***-install-2.4.6-I601.exe
2. 安裝過程:
這裏只安裝客戶端和網絡,見下圖:
剩下的步驟默認便可。
3. 將服務端內ca.crt、client.crt、client.key、client.conf複製到客戶端D:\Program Files\Open×××\config下。
D:\Program Files\Open×××>tree /f 卷 軟件 的文件夾 PATH 列表 卷序列號爲 0000008F 04B4:1271 D:. │ icon.ico │ Uninstall.exe │ ├─bin │ libcrypto-1_1-x64.dll │ liblzo2-2.dll │ libpkcs11-helper-1.dll │ libssl-1_1-x64.dll │ openssl.exe │ open***-gui.exe │ open***.exe │ open***serv.exe │ ├─config │ ca.crt │ client.crt │ client.key │ client.o*** │ README.txt │ ta.key │ ├─doc │ INSTALL-win32.txt │ license.txt │ open***.8.html │ ├─log │ README.txt │ └─sample-config client.o*** sample.o*** server.o***
4. 配置文件:
#D:\Program Files\Open×××\config>grep -Ev "^$|^[#;]" client.o*** client dev tun proto udp remote ***.apicloud.com 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client.crt key client.key remote-cert-tls server tls-auth ta.key 1 cipher AES-256-CBC comp-lzo verb 3
配置文件解析:
# 定義是一個客戶端 client # 定義使用路由IP模式,與服務端一致 ;dev tap dev tun # 定義Windows下使用的網卡名稱,linux不須要 ;dev-node MyTap # 定義使用的協議,與服務端一致 ;proto tcp proto tcp # 指定服務端地址和端口,能夠用多行指定多臺服務器實現負載均衡高可用(從上往下嘗試) remote 211.152.x.x 1194 ;remote my-server-2 1194 # 若上面配置了多臺服務器,讓客戶端隨機鏈接,以便實現負載均衡 ;remote-random # 解析服務器域名 resolv-retry infinite # 客戶端不須要綁定端口 nobind # Try to preserve some state across restarts. persist-key persist-tun # 重點,就是指定ca和客戶端的證書 ca ca.crt cert client.crt key client.key # 使用lzo壓縮,與服務端一致 comp-lzo # Set log file verbosity. verb 3
5. 鏈接:
6、客戶端IP地址的使用
在--topology mode選項中,mode有三種取值,即net30、subnet和p2p。
當運行在--dev tun模式下時,能夠經過--topology mode選項來配置虛擬地址的拓撲結構。而對於--dev tap而言,該選項沒有任何意義,由於在--dev tap模式下,老是使用子網拓撲若是在服務器端設置了--topology mode選項,那麼--server和--server-bridge選項將會很好地自動地把拓撲模式推送到客戶端。該選項也能夠被手動的推送到客戶端,相似於--dev選項,另外,還要求服務器端和客戶端必須支持該選項。
一、net30
Open×××默認的子網掩碼是/30,也就是255.255.225.252。在這樣的狀況下,每組網絡四個地址,只有兩個地址可使用,一個給服務端,一個給客戶端,另一個是網絡地址,一個是廣播地址,這樣地址是很浪費的,這是Open××× 2.0的默認模式。
在Open×××的2.0版本中,Open×××能經過虛擬一個TUN虛擬接口處理多個客戶端,要處理這種技術,能夠把服務器上看到的PtP鏈接看做是一個操做系統和Open×××之間的鏈接,而在Open×××內部還須要爲每個客戶端建立另外一個PtP。如何全部的O/S在TUN接口上真正的支持PtP鏈接,那麼這將會是的Open×××服務器僅使用一個IP地址,而且一個客戶端也使用一個IP地址。
在OS系統和Open×××之間首先要有一個10.8.0.1<->10.8.0.2的PtP鏈接。
因而Open×××爲每個鏈接的客戶端指定一個/30的子網,第一個可使用的/30的子網是:
10.8.0.4:網絡地址;
10.8.0.5:在Open×××中的「虛擬」IP地址;
10.8.0.6:指定給客戶端的IP地址;
10.8.0.7:廣播地址。
而後將路由推到客戶端,這樣便使全部IP地址爲10.8.0.5的流量都必須經過「網關」10.8.0.5才能夠出去或者進入。
因爲10.8.0.5僅是Open×××內部的一個虛擬IP地址,它被用做末端路由,對應這個地址,Open×××不會接受ping,而10.8.0.6對於服務器的操做系統來講倒是一個真正的IP地址,所以它能夠接受ping,咱們讓客戶端鏈接查看一下。
以此類推,第二個客戶端鏈接分配的IP地址對就是10.8.0.9<->10.8.0.10,從這個IP分配來看,對IP的使用形成的浪費。可是對於Open×××服務器端僅使用一個配置來爲全部類型的客戶端分配地址來講這是最好的一種方式。
二、subnet
subnet經過配置TUN接口的本地IP地址和子網掩碼來使用一個子網,而不是點對點的拓撲結構,相似於使用--dev tap和以太網橋模式的拓撲結構。這種模式爲每一個客戶端分配單個IP地址。
三、p2p
p2p模式使用點對點拓撲,僅適用於Windows系統下,如今已經再也不同意使用。
7、遇到的問題
1. 安裝全部步驟配置完成後, 啓動服務器, 啓動客戶端,發現鏈接失敗, 錯誤以下:
Wed May 23 14:07:08 2018 117.107.209.233:11840 [client-user-test1] Peer Connection Initiated with [AF_INET]117.107.209.233:11840 Wed May 23 14:07:08 2018 MULTI: new connection by client 'client-user-test1' will cause previous active sessions by this client to be dropped. Remember to use the --duplicate-cn option if you want multiple clients using the same certificate or username to concurrently connect. Wed May 23 14:07:08 2018 MULTI_sva: pool returned IPv4=10.124.163.6, IPv6=(Not enabled) Wed May 23 14:07:08 2018 MULTI: Learn: 10.124.163.6 -> client-user-test1/117.107.209.233:11840 Wed May 23 14:07:08 2018 MULTI: primary virtual IP for client-user-test1/117.107.209.233:11840: 10.124.163.6 Wed May 23 14:07:09 2018 client-user-test1/117.107.209.233:11840 PUSH: Received control message: 'PUSH_REQUEST' Wed May 23 14:07:09 2018 client-user-test1/117.107.209.233:11840 SENT CONTROL [client-user-test1]: 'PUSH_REPLY,route 10.0.0.0 255.0.0.0,dhcp-option DNS 223.5.5.5,dhcp-option DNS 223.6.6.6,route 10.124.163.0 255.255.255.0,topology net30,ping 10,ping-restart 120,ifconfig 10.124.163.6 10.124.163.5,peer-id 0,cipher AES-256-GCM' (status=1) Wed May 23 14:07:09 2018 client-user-test1/117.107.209.233:11840 Data Channel: using negotiated cipher 'AES-256-GCM' Wed May 23 14:07:09 2018 client-user-test1/117.107.209.233:11840 Outgoing Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key Wed May 23 14:07:09 2018 client-user-test1/117.107.209.233:11840 Incoming Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
緣由: windows客戶端在安裝的時候沒有安裝TAP Virtual Ethernet Adapter。致使客戶端open***對應的網絡鏈接處於禁用狀態。
2. 在 Linux Open××× 服務端吊銷(revoke)客戶端證書
1)進入easy-rsa的安裝路徑。 2)執行 source vars 3)假設吊銷的客戶端名稱爲client1 則執行./revoke-full client1 注:這條命令執行完成以後, 會在 keys 目錄下面, 生成一個 crl.pem 文件,這個文件中包含了吊銷證書的名單。成功註銷某個證書以後,能夠打開 keys/index.txt 文件,能夠看到被註銷的證書前面,已標記爲R 4)確保服務器配置文件存在 crl-verify選項。 在server.conf 中加入 crl-verify crl.pem //crl.pem 根據實際路徑寫 5)重啓open***服務器
3. 報錯:Authenticate/Decrypt packet error: packet HMAC authentication failed
嘗試將服務端和客戶端的tls-auth相關配置去掉試試
4. 報錯:
TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity) TLS Error: TLS handshake failed
查閱資料,說是網絡有可能有問題,路由器沒有開nat,或者其它的網絡問題。 想來多是防火牆限制了,是不是防火牆的問題,須要試一下。有兩種方式,第一種方式,使用不受限的SSL端口443和TCP協議 。實際遇到的問題是TLS 認證服務器端和客戶端配置不一致致使。