open***安裝和配置

測試系統環境:centos 7.2

一、安裝

依賴 :gcc、openssl、lzo、pam

yum install -y gcc openssl-devel lzo-devel pam-devel

#解壓
tar xf open***-2.3.4.tar.gz   

#切換到open***目錄

cd open***-2.3.4

#調用configure
./configure --prefix=/usr/local/open***-2.3.4 --enable-password-save

#編譯、安裝
make && make install 

#啓動
sbin/open*** 配置文件

二、生成證書

 使用easyrsa3來製作證書,下載地址:https://github.com/Open***/easy-rsa
 在linux上面將其解壓得到easy-rsa-master,進入easyrsa3,將vars.example複製一份命名爲vars,此文件爲製作證書時所使用到的配置文件,根據需要,我只打開了如下選項: 

    set_var EASYRSA_REQ_COUNTRY "CN" 
    set_var EASYRSA_REQ_PROVINCE    "Guangdong" 
    set_var EASYRSA_REQ_CITY    "Shenzhen" 
    set_var EASYRSA_REQ_ORG "XXX" 
    set_var EASYRSA_REQ_EMAIL   "[email protected]" 
如果open*** client的配置文件中使用了ns-cert-type server則要打開此選項,製作server證書時會將一些信息寫入證書,如不打開此選項,則open*** client會提示server certificate verify fail 
    set_var EASYRSA_NS_SUPPORT  "yes" 

下面就可以製作證書了,每條命令執行之後都有些信息輸出,如出錯,會提示相關錯誤信息 
./easyrsa init-pki    
初始化,會在當前目錄創建PKI目錄,用於存儲一些中間變量及最終生成的證書 

./easyrsa build-ca
創建根證書,首先會提示設置密碼,用於ca對之後生成的server和client證書籤名時使用,然後會提示設置Country Name,State or Province Name,Locality Name,Organization Name,Organizational Unit Name,Common Name,Email Address,可以鍵入回車使用默認的,也可以手動更改

./easyrsa gen-req server nopass
創建server端證書和private key,nopass表示不加密private key,然後會提示設置Country Name,State or Province Name,Locality Name,Organization Name,Organizational Unit Name,Common Name,Email Address,可以鍵入回車使用默認的,也可以手動更改

./easyrsa sign server server
給server端證書做簽名,首先是對一些信息的確認,可以輸入yes,然後輸入build-ca時設置的那個密碼

./easyrsa gen-dh
創建Diffie-Hellman,時間會有點長,耐心等待

創建client端證書,需要單獨把easyrsa3文件夾拷貝出來一份,刪除裏面的PKI目錄,然後進入到此目錄
./easyrsa init-pki
初始化,會在當前目錄創建PKI目錄,用於存儲一些中間變量及最終生成的證書

./easyrsa gen-req client nopass
創建client端證書和private key,nopass表示不加密private key,然後會提示設置Country Name,State or Province Name,Locality Name,Organization Name,Organizational Unit Name,Common Name,Email Address,可以鍵入回車使用默認的,也可以手動更改

回到製作server證書時的那個easyrsa3目錄,導入client端證書,準備簽名
./easyrsa import-req client.req所在路徑 client
client.req應該在剛纔製作client端證書的easyrsa3/pki/reqs/下面

./easyrsa sign client client
給client端證書做簽名,首先是對一些信息的確認,可以輸入yes,然後輸入build-ca時設置的那個密碼

至此,server和client端證書已製作完畢
open*** server端需要的是
easyrsa3/pki/ca.crt <製作server證書的文件夾>
easyrsa3/pki/private/server.key <製作server證書的文件夾>
easyrsa3/pki/issued/server.crt <製作server證書的文件夾>
easyrsa3/pki/dh.pem

open*** client端需要的是
easy-rsa/easyrsa3/pki/ca.crt <製作server證書的文件夾>
easy-rsa/easyrsa3/pki/issued/client.crt <製作server證書的文件夾>
easy-rsa/easyrsa3/pki/private/client.key <製作client證書的文件夾>

三、配置證書認證登錄

Open***已經在sample/sample-config-files子目錄中爲我們提供了相關的示例文件server.conf和client.conf,並且配置文件中的每個配置選項均有詳細的英文說明(配置文件中"#"或";"開頭的均爲註釋內容),實際上,將兩個模板文件中與IP地址有關的配置修改一下,就可以直接拿來使用。

服務端配置server.conf:
local 192.168.1.106     #指定監聽的本機IP(因爲有些計算機具備多個IP地址),該命令是可選的,默認監聽所有IP地址。
port 1194             #指定監聽的本機端口號
proto udp             #指定採用的傳輸協議,可以選擇tcp或udp
dev tun               #指定創建的通信隧道類型,可選tun或tap
ca ca.crt             #指定CA證書的文件路徑
cert server.crt       #指定服務器端的證書文件路徑
key server.key    #指定服務器端的私鑰文件路徑
dh dh2048.pem         #指定迪菲赫爾曼參數的文件路徑
server 10.0.0.0 255.255.255.0   #指定虛擬局域網佔用的IP地址段和子網掩碼,此處配置的服務器自身佔用10.0.0.1。
ifconfig-pool-persist ipp.txt   #服務器自動給客戶端分配IP後,客戶端下次連接時,仍然採用上次的IP地址(第一次分配的IP保存在ipp.txt中,下一次分配其中保存的IP)。
tls-auth ta.key 0     #開啓TLS-auth,使用ta.key防禦***。服務器端的第二個參數值爲0,客戶端的爲1。
keepalive 10 120      #每10秒ping一次,連接超時時間設爲120秒。
comp-lzo              #開啓***連接壓縮,如果服務器端開啓,客戶端也必須開啓
client-to-client      #允許客戶端與客戶端相連接,默認情況下客戶端只能與服務器相連接
persist-key
persist-tun           #持久化選項可以儘量避免訪問在重啓時由於用戶權限降低而無法訪問的某些資源。
status open***-status.log    #指定記錄Open***狀態的日誌文件路徑
verb 3                #指定日誌文件的記錄詳細級別,可選0-9,等級越高日誌內容越詳細

客戶端配置client.conf:
client         #指定當前***是客戶端
dev tun        #必須與服務器端的保持一致
proto udp      #必須與服務器端的保持一致
remote 192.168.1.106 1194      #指定連接的遠程服務器的實際IP地址和端口號
resolv-retry infinite    #斷線自動重新連接,在網絡不穩定的情況下(例如:筆記本電腦無線網絡)非常有用。
nobind         #不綁定特定的本地端口號
persist-key
persist-tun
ca ca.crt      #指定CA證書的文件路徑
cert client1.crt       #指定當前客戶端的證書文件路徑

key client1.key #指定當前客戶端的私鑰文件路徑
ns-cert-type server #指定採用服務器校驗方式
tls-auth ta.key 1 #如果服務器設置了防禦DoS等***的ta.key,則必須每個客戶端開啓;如果未設置,則註釋掉這一行;
comp-lzo #與服務器保持一致
verb 3 #指定日誌文件的記錄詳細級別,可選0-9,等級越高日誌內容越詳細

四、配置賬號密碼登錄:

    修改Server端配置文件:
    auth-user-pass-verify /usr/local/open***/etc/checkpsw.sh via-env(腳本存放路徑)
    client-cert-not-required(如果加上client-cert-not-required則代表只使用用戶名密碼方式驗證登錄,如果不加,則代表需要證書和用戶名密碼雙重驗證登錄)
    username-as-common-name
    script-security 3

    #切換到etc目錄
    cd /usr/local/open***-2.3.4/etc/
    vim checkpsw.sh

 #!/bin/sh
 #######################################################
 # checkpsw.sh (C) 2004 Mathias Sundman <mathias@open***.se>
 #This script will authenticate Open*** users against
 #a plain text file. The passfile should simply contain
 #one row per user with the username first followed by

#one or more space(s) or tab(s) and then the password.
########################################################
PASSFILE="/etc/open***/psw-file"
LOG_FILE="/var/log/open***-password.log"
TIME_STAMP=date "+%Y-%m-%d %T"

if [ ! -r "${PASSFILE}" ]; then
echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
exit 1
fi

CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}'   ${PASSFILE}`

if [ "${CORRECT_PASSWORD}" = "" ]; then 
echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1
fi

if [ "${password}" = "${CORRECT_PASSWORD}" ]; then 
echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
exit 0
fi

echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1

修改checkpsw.sh裏的相應參數,主要改下PASSFILE和LOG_FILE兩個變量就可以了

vim psw-file
test 123456 (前面是用戶 後面是密碼)

chmod 400 psw-file(注:這裏 psw-file的權限,儘量小點)

修改客戶端配置文件:
註銷掉這兩行
#cert client1.crt
#key client1.key
再添加這一行,添加這行,就會提示輸入用戶名和密碼
auth-user-pass 
注:編譯時添加了 --enable-password-save擴展,可以從指定文件讀取用戶名密碼,文件第一行爲賬號,第二行爲密碼,在auth-user-pass後加上指定文件即可,如:auth-user-pass pwd.txt

五、未開啓MD5導致***連接失敗

具體錯誤如下:
Feb 24 17:08:08 2016 VERIFY ERROR: depth=0, error=certificate signature failure: C=US, ST=CA, L=SanFrancisco, O=Open***, OU=changeme, CN=changeme,name=changeme, [email protected]
Wed Feb 24 17:08:08 2016 TLS_ERROR: BIO read tls_read_plaintext error: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Wed Feb 24 17:08:08 2016 TLS Error: TLS object -> incoming plaintext read error
Wed Feb 24 17:08:08 2016 TLS Error: TLS handshake failed
Wed Feb 24 17:08:08 2016 Fatal TLS error (check_tls_errors_co), restarting
Wed Feb 24 17:08:08 2016 SIGUSR1[soft,tls-error] received, process restarting
Wed Feb 24 17:08:13 2016 Attempting to establish TCP connection with [AF_INET] [nonblock]
Wed Feb 24 17:08:14 2016 TCP connection established with [AF_INET]
Wed Feb 24 17:08:14 2016 TCPv4_CLIENT link local: [undef]
Wed Feb 24 17:08:14 2016 TCPv4_CLIENT link remote: [AF_INET]
Wed Feb 24 17:08:14 2016 VERIFY ERROR: depth=0, error=certificate signature failure: C=US, ST=CA, L=SanFrancisco, O=Open***, OU=changeme, CN=changeme, name=changeme, [email protected]
Wed Feb 24 17:08:14 2016 TLS_ERROR: BIO read tls_read_plaintext error: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

上網查很多人說是時間不同步我同步服務器的時間也沒有解決問題!後來才發現問題所在
主要原因是Centos 7移除了Openssl的MD5支持
openssl仍然默認以md5作爲散列算法並且可以正確識別md5散列算法,所以就悲劇了,只有cenots7不好用。關鍵是這個錯誤是大錯誤被小錯誤還掩蓋了一下,所以很難被發現。

解決方法:

[root@localhost open***]# export NSS_HASH_ALG_SUPPORT=+MD5
[root@localhost open***]# export OPENSSL_ENABLE_MD5_VERIFY=1
編輯 vim /usr/lib/systemd/system/NetworkManager.service
添加Environment="OPENSSL_ENABLE_MD5_VERIFY=1 NSS_HASH_ALG_SUPPORT=+MD5"
保存退出後

[root@localhost open***]# systemctl daemon-reload
[root@localhost open***]# systemctl restart NetworkManager.service
成功連接open***,檢查路由和ip地址配置一切正常!

六、Open***客戶端證書合併到配置文件中

編輯client.o***客戶端配置文件:
vim client.o***

刪除或者註釋掉以下幾行內容:
在這裏我把它們註釋掉:
ca ca.crt  改爲:#ca ca.crt
cert client.crt  改爲:#cert client.crt
key client.key  改爲:#key client.key
tls-auth ta.key 1  改爲:#tls-auth ta.key 1

在最後面添加以下內容:
<ca> 
ca.crt文件內容
</ca>
<cert> 
client.crt文件內容
</cert>
<key> 
client.key文件內容
</key>
key-direction 1 
<tls-auth> 
ta.key文件內容
</tls-auth>

複製各文件裏的內容到相應的位置即可!保存退出!!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章