一、openvpn原理
二、安裝openvpn
三、制作相關證書
3.1 制作CA證書 3.2 制作Server端證書 3.3 制作Client端證書
四、配置Server端
五、配置Client端
5.1 在Windows 系統上 5.2 在OpenVPN server上 5.3 配置client段配置文件
一、openvpn原理
openvpn通過使用公開密鑰(非對稱密鑰,加密解密使用不同的key,一個稱為Publice key,另外一個是Private key)對數據進行加密的。這種方式稱為TLS加密
openvpn使用TLS加密的工作過程是,首先VPN Sevrver端和VPN Client端要有相同的CA證書,雙方通過交換證書驗證雙方的合法性,用于決定是否建立VPN連接。
然后使用對方的CA證書,把自己目前使用的數據加密方法加密后發送給對方,由于使用的是對方CA證書加密,所以只有對方CA證書對應的Private key才能解密該數據,這樣就保證了此密鑰的安全性,并且此密鑰是定期改變的,對于竊聽者來說,可能還沒有破解出此密鑰,VPN通信雙方可能就已經更換密鑰了。
二、安裝openvpn
yum方式安裝,此處統一使用aliyun中centos和epel源
# rm /etc/yum.repos.d/* -fr # vim /etc/yum.repos.d/ali.repo [centos6] name=centeros6 base baseurl=http://mirrors.aliyun.com/centos/6/os/x86_64/ gpgcheck=0 [epel] name=epel base baseurl=http://mirrors.aliyun.com/epel/6/x86_64 gpgcheck=0
為避免出現錯誤,關閉selinux
# setenforce 0;sed -i 's/SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
開始安裝openvpn server
# yum install -y openvpn
openvpn安裝完畢后,我們來查看openvpn的版本,如下:
# openvpn --version OpenVPN 2.3.10 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Jan 4 2016 library versions: OpenSSL 1.0.1e-fips 11 Feb 2013, LZO 2.03 Originally developed by James Yonan Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net> Compile time defines: enable_crypto=yes enable_crypto_ofb_cfb=yes enable_debug=yes enable_def_auth=yes enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown enable_fast_install=yes enable_fragment=yes enable_http_proxy=yes enable_iproute2=yes enable_libtool_lock=yes enable_lzo=yes enable_lzo_stub=no enable_management=yes enable_multi=yes enable_multihome=yes enable_pam_dlopen=no enable_password_save=yes enable_pedantic=no enable_pf=yes enable_pkcs11=yes enable_plugin_auth_pam=yes enable_plugin_down_root=yes enable_plugins=yes enable_port_share=yes enable_pthread=yes enable_selinux=no enable_server=yes enable_shared=yes enable_shared_with_static_runtimes=no enable_small=no enable_socks=yes enable_ssl=yes enable_static=yes enable_strict=no enable_strict_options=no enable_systemd=no enable_win32_dll=yes enable_x509_alt_username=yes with_crypto_library=openssl with_gnu_ld=yes with_iproute_path=/sbin/ip with_mem_check=no with_plugindir='$(libdir)/openvpn/plugins' with_sysroot=no
openvpn安裝完畢后,我們再來安裝easy-rsa。
easy-rsa是用來制作openvpn相關證書的。
安裝easy-rsa,使用如下命令:
# yum install -y easy-rsa
查看easy-rsa安裝的文件,如下:
[root@centos6 openvpn]# rpm -ql easy-rsa /usr/share/doc/easy-rsa-2.2.2 /usr/share/doc/easy-rsa-2.2.2/COPYING /usr/share/doc/easy-rsa-2.2.2/COPYRIGHT.GPL /usr/share/doc/easy-rsa-2.2.2/doc /usr/share/doc/easy-rsa-2.2.2/doc/Makefile.am /usr/share/doc/easy-rsa-2.2.2/doc/README-2.0 /usr/share/easy-rsa /usr/share/easy-rsa/2.0/build-ca /usr/share/easy-rsa/2.0/build-dh /usr/share/easy-rsa/2.0/build-inter /usr/share/easy-rsa/2.0/build-key /usr/share/easy-rsa/2.0/build-key-pass /usr/share/easy-rsa/2.0/build-key-pkcs12 /usr/share/easy-rsa/2.0/build-key-server /usr/share/easy-rsa/2.0/build-req /usr/share/easy-rsa/2.0/build-req-pass /usr/share/easy-rsa/2.0/clean-all /usr/share/easy-rsa/2.0/inherit-inter /usr/share/easy-rsa/2.0/list-crl /usr/share/easy-rsa/2.0/openssl-0.9.6.cnf /usr/share/easy-rsa/2.0/openssl-0.9.8.cnf /usr/share/easy-rsa/2.0/openssl-1.0.0.cnf /usr/share/easy-rsa/2.0/pkitool /usr/share/easy-rsa/2.0/revoke-full /usr/share/easy-rsa/2.0/sign-req /usr/share/easy-rsa/2.0/vars /usr/share/easy-rsa/2.0/whichopensslcnf
我們可以看到easy-rsa已經安裝到/usr/share/easy-rsa/目錄下。
三、制作相關證書
根據第一章節openvpn的工作原理,我們可以知道openvpn的證書分為三部分:CA證書、Server端證書、Client端證書。 下面我們通過easy-rsa分別對其進行制作。
3.1 制作CA證書
openvpn與easy-rsa安裝完畢后,我們可以直接在/usr/share/easy-rsa/2.0 制作相關的證書,但是為了后續的管理證書的方便,我們需要在/etc/openvpn/目錄下創建easy-rsa文件夾, 然后把/usr/share/easy-rsa/目錄下的所有文件全部復制到/etc/openvpn/easy-rsa/下:
# mkdir /etc/openvpn/easy-rsa/ # cp -r /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa/ # ll /etc/openvpn/easy-rsa/ total 116 -rwxr-xr-x. 1 root root 119 Apr 20 15:15 build-ca -rwxr-xr-x. 1 root root 352 Apr 20 15:15 build-dh -rwxr-xr-x. 1 root root 188 Apr 20 15:15 build-inter -rwxr-xr-x. 1 root root 163 Apr 20 15:15 build-key -rwxr-xr-x. 1 root root 157 Apr 20 15:15 build-key-pass -rwxr-xr-x. 1 root root 249 Apr 20 15:15 build-key-pkcs12 -rwxr-xr-x. 1 root root 268 Apr 20 15:15 build-key-server -rwxr-xr-x. 1 root root 213 Apr 20 15:15 build-req -rwxr-xr-x. 1 root root 158 Apr 20 15:15 build-req-pass -rwxr-xr-x. 1 root root 449 Apr 20 15:15 clean-all -rwxr-xr-x. 1 root root 1471 Apr 20 15:15 inherit-inter drwx------. 2 root root 4096 Apr 26 21:31 keys -rwxr-xr-x. 1 root root 302 Apr 20 15:15 list-crl -rw-r--r--. 1 root root 7791 Apr 20 15:15 openssl-0.9.6.cnf -rw-r--r--. 1 root root 8348 Apr 20 15:15 openssl-0.9.8.cnf -rw-r--r--. 1 root root 8245 Apr 20 15:15 openssl-1.0.0.cnf -rwxr-xr-x. 1 root root 12966 Apr 20 15:15 pkitool -rwxr-xr-x. 1 root root 928 Apr 20 15:15 revoke-full -rwxr-xr-x. 1 root root 178 Apr 20 15:15 sign-req -rw-r--r--. 1 root root 2042 Apr 20 17:01 vars -rwxr-xr-x. 1 root root 740 Apr 20 15:15 whichopensslcnf
在開始制作CA證書之前,我們還需要編輯vars文件,修改如下相關選項內容即可。如下:
# vim /etc/openvpn/easy-rsa/vars export KEY_COUNTRY=”cn” export KEY_PROVINCE=”BJ” export KEY_CITY=”Chaoyang” export KEY_ORG=”user” export KEY_EMAIL=”user@user.com” export KEY_OU=”user” export KEY_NAME=”user”
vars文件主要用于設置證書的相關組織信息,引號部分的內容可以根據自己的實際情況自行修改。
然后使用source vars命令使其生效。
注意:執行clean-all命令會刪除,當前目錄下keys文件夾里證書等文件。
# source vars. # ./clean-all
現在開始正式制作CA證書,使用如下命令:
# ./build-ca Generating a 2048 bit RSA private key ............................................................................................................+++ ........................................+++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [CN]: State or Province Name (full name) [BJ]: Locality Name (eg, city) [TZ]: Organization Name (eg, company) [CTG]: Organizational Unit Name (eg, section) [openvpn]: Common Name (eg, your name or your server's hostname) [CTG CA]: Name [openvpn]: Email Address [admin@admin.com]:
一路按回車鍵即可。制作完成后,我們可以查看keys目錄。
# ll /etc/openvpn/easy-rsa/keys/ total 32 -rw-r--r--. 1 root root 1639 Apr 27 13:06 ca.crt -rw-------. 1 root root 1704 Apr 27 13:06 ca.key -rw-r--r--. 1 root root 341 Apr 26 21:31 index.txt -rw-r--r--. 1 root root 21 Apr 25 23:16 index.txt.attr -rw-r--r--. 1 root root 21 Apr 25 23:16 index.txt.attr.old -rw-r--r--. 1 root root 2131 Apr 25 23:16 index.txt.old -rw-r--r--. 1 root root3 Apr 25 23:16 serial -rw-r--r--. 1 root root3 Apr 25 23:16 serial.old
我們可以看到已經生成了ca.crt和ca.key兩個文件,其中ca.crt就是我們所說的CA證書。至此,CA證書制作完畢。 現在把該CA證書的ca.crt文件復制到openvpn的啟動目錄/etc/openvpn下:
# cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn # ll /etc/openvpn/ total 16268 -rw-r--r--. 1 root root 1639 Apr 20 17:02 ca.crt drwxr-xr-x. 3 root root 4096 Apr 27 13:00 easy-rsa
3.2 制作Server端證書
CA證書制作完成后,我們現在開始制作Server端證書。如下:
# ./build-key-server vpnserver Generating a 2048 bit RSA private key ........+++ ........................................................................+++ writing new private key to 'vpnserver.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [CN]: State or Province Name (full name) [BJ]: Locality Name (eg, city) [TZ]: Organization Name (eg, company) [CTG]: Organizational Unit Name (eg, section) [openvpn]: Common Name (eg, your name or your server's hostname) [vpnserver]: Name [openvpn]: Email Address [admin@admin.com]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'CN' stateOrProvinceName :PRINTABLE:'BJ' localityName :PRINTABLE:'TZ' organizationName :PRINTABLE:'CTG' organizationalUnitName:PRINTABLE:'openvpn' commonName:PRINTABLE:'vpnserver' name :PRINTABLE:'openvpn' emailAddress :IA5STRING:'admin@admin.com' Certificate is to be certified until Apr 25 05:10:49 2026 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
一路執行并點擊兩次“y”即可,查看生成的Server端證書:
# ll /etc/openvpn/easy-rsa/keys/ total 56 -rw-r--r--. 1 root root 1639 Apr 27 13:06 ca.crt -rw-------. 1 root root 1704 Apr 27 13:06 ca.key -rw-r--r--. 1 root root 458 Apr 27 13:10 index.txt -rw-r--r--. 1 root root 5346 Apr 27 13:10 vpnserver.crt -rw-r--r--. 1 root root 1058 Apr 27 13:10 vpnserver.csr -rw-------. 1 root root 1704 Apr 27 13:10 vpnserver.key
可以看到已經生成了vpnserver.crt、vpnserver.key和vpnserver.csr三個文件。其中vpnserver.crt和vpnserver.key兩個文件是我們要使用的。
現在再為服務器生成加密交換時的Diffie-Hellman文件
# ./build-dh Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time ..........+..........................................................................................................................................................................+.....................................................+.......................................................................+.....................................................................................................................+.................................+....................................+...........................................................................+......................................................................................................................................................+...............................................................................................................+.....................+..................................................+......................................................................................................................................................................................................+.......................................+............................+.....................................................................................................................................+.........................................................................................+.........................................................................................................................................................................................+....................................................................................................................+.....................................+.........................+....................+.................................++*++* [root@centos6 easy-rsa]# ll keys/ total 60 -rw-r--r--. 1 root root 1639 Apr 27 13:06 ca.crt -rw-------. 1 root root 1704 Apr 27 13:06 ca.key -rw-r--r--. 1 root root 424 Apr 27 13:14 dh2048.pem -rw-r--r--. 1 root root 458 Apr 27 13:10 index.txt -rw-r--r--. 1 root root3 Apr 27 13:10 serial -rw-r--r--. 1 root root 5346 Apr 27 13:10 vpnserver.crt -rw-r--r--. 1 root root 1058 Apr 27 13:10 vpnserver.csr -rw-------. 1 root root 1704 Apr 27 13:10 vpnserver.key [root@centos6 easy-rsa]#
已經生成了dh文件dh2048.pem。 把vpnserver.crt、vpnserver.key、dh2048.pem復制到/etc/openvpn/目錄下
# cd /etc/openvpn/easy-rsa # cp keys/vpnserver.crt keys/vpnserver.key keys/dh2048.pem /etc/openvpn/ # ll /etc/openvpn/ total 16492 -rw-r--r--. 1 root root 1639 Apr 20 17:02 ca.crt -rw-r--r--. 1 root root 424 Apr 20 17:07 dh2048.pem drwxr-xr-x. 3 root root 4096 Apr 27 13:00 easy-rsa -rw-r--r--. 1 root root 5342 Apr 20 17:07 openvpn.crt -rw-------. 1 root root 1704 Apr 20 17:07 openvpn.key
至此,Server端證書就制作完畢。
3.3 制作Client端證書
Server端證書制作完成后,我們現在開始制作Client端證書。 新建user1的證書
# cd /etc/openvpn/easy-rsa # ./build-key user1 Generating a 2048 bit RSA private key .........+++ ......................................+++ writing new private key to 'user1.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [CN]: State or Province Name (full name) [BJ]: Locality Name (eg, city) [TZ]: Organization Name (eg, company) [CTG]: Organizational Unit Name (eg, section) [openvpn]: Common Name (eg, your name or your server's hostname) [user1]: Name [openvpn]: Email Address [admin@admin.com]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'CN' stateOrProvinceName :PRINTABLE:'BJ' localityName :PRINTABLE:'TZ' organizationName :PRINTABLE:'CTG' organizationalUnitName:PRINTABLE:'openvpn' commonName:PRINTABLE:'user1' name :PRINTABLE:'openvpn' emailAddress :IA5STRING:'admin@admin.com' Certificate is to be certified until Apr 25 05:19:17 2026 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated [root@centos6 easy-rsa]# ll keys/ total 84 -rw-r--r--. 1 root root 1639 Apr 27 13:06 ca.crt -rw-------. 1 root root 1704 Apr 27 13:06 ca.key -rw-r--r--. 1 root root 424 Apr 27 13:14 dh2048.pem -rw-r--r--. 1 root root 571 Apr 27 13:19 index.txt -rw-r--r--. 1 root root3 Apr 27 13:19 serial -rw-r--r--. 1 root root 5216 Apr 27 13:19 user1.crt -rw-r--r--. 1 root root 1050 Apr 27 13:19 user1.csr -rw-------. 1 root root 1704 Apr 27 13:19 user1.key -rw-r--r--. 1 root root 5346 Apr 27 13:10 vpnserver.crt -rw-r--r--. 1 root root 1058 Apr 27 13:10 vpnserver.csr -rw-------. 1 root root 1704 Apr 27 13:10 vpnserver.key [root@centos6 easy-rsa]#
已經生成了user1.csr、user1.crt和user1.key這個三個文件,user1.crt和user1.key兩個文件是我們要使用的。
至此,Client端證書就制作完畢。
如果你想快速生成用戶證書不需要手工交互的話,可以使用如下命令,例如生成user2
# ./build-key --batch user2 Generating a 2048 bit RSA private key ...................................................+++ .......................................+++ writing new private key to 'user2.key' ----- Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'CN' stateOrProvinceName :PRINTABLE:'BJ' localityName :PRINTABLE:'TZ' organizationName :PRINTABLE:'CTG' organizationalUnitName:PRINTABLE:'openvpn' commonName:PRINTABLE:'user2' name :PRINTABLE:'openvpn' emailAddress :IA5STRING:'admin@admin.com' Certificate is to be certified until Apr 25 05:21:01 2026 GMT (3650 days) failed to update database TXT_DB error number 2 You have new mail in /var/spool/mail/root
四、配置Server端
所有證書制作完畢后,我們現在開始配置Server端。Server端的配置文件,我們可以從openvpn自帶的模版中進行復制。
# cp /usr/share/doc/openvpn-2.3.10/sample/sample-config-files/server.conf /etc/openvpn/server.conf.bak # cd /etc/openvpn/ # ll total 16720 -rw-r--r--. 1 root root 1639 Apr 20 17:02 ca.crt -rw-r--r--. 1 root root 424 Apr 20 17:07 dh2048.pem drwxr-xr-x. 3 root root 4096 Apr 27 13:00 easy-rsa -rw-r--r--. 1 root root 5342 Apr 20 17:07 openvpn.crt -rw-------. 1 root root 1704 Apr 20 17:07 openvpn.key -rw-r--r--. 1 root root10441 Apr 20 17:20 server.conf.bak
我們通過grep修改server.conf.bak文件來生成server.conf文件
# grep -vE "^#|^;|^$" server.conf.bak > server.conf # vim server.conf port 1194 proto tcp -->修改處 dev tun ca ca.crt cert vpnserver.crt -->修改處 key vpnserver.key -->修改處 dh dh2048.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt keepalive 10 120 comp-lzo persist-key persist-tun status openvpn-status.log verb 3
與原模版文件相比,在此我修改幾個地方。
第一、修改了openvpn運行時使用的協議,由原來的UDP協議修改為TCP協議。生成環境建議使用TCP協議。
第二、修改了openvpn服務器的相關證書,由原來的server.csr、server.key修改為vpnserver.crt、vpnserver.key。
注意:上述server.conf文件中vpnserver.crt、vpnserver.key、dh2048.pem要與/etc/openvpn/目錄下的相關文件一一對應。 同時,如果上述文件如果沒有存放在/etc/openvpn/目錄下,在server.conf文件中,我們要填寫該文件的絕對路徑。
配置文件修改完畢后,我們現在來啟動openvpn,使用如下命令:
# service openvpn start Starting openvpn: [ OK ] # ss -tnlp |grep 1194 LISTEN 0 1 *:1194 *:* users:(("openvpn",1765,5)) #
可以的看出openvpn已經在此啟動,使用的TCP協議的1194端口。
五、配置Client端
Server端配置并啟動后,我們現在來配置Client端。我們主要在Windows OS上。
5.1 在Windows OS上
下載安裝“openvpn-2.1.1-gui-1.0.3-install-cn-64bit”,地址為: https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/vpntech/openvpn-2.1.1-gui-1.0.3-install-cn-64bit.zip
在windows的Client段,安裝完畢Openvpn后,程序安裝路徑 缺省目錄是:C:\Program Files (x86)\OpenVPN\ 在C:\Program Files (x86)\OpenVPN\config下新建一個文件夾存放用戶的配置證書
5.2 在OpenVPN server上
我們都需要把Client證書、CA證書以及Client配置文件下載到Client端。 Client證書我們主要使用crt和key結尾的兩個文件,而CA證書我們主要使用crt結尾的文件。在Server端新建一個用戶user1存放證書的目錄,并將需要的證書文件存放到此目錄。
# mkdir /root/user1/ -pv # cp /usr/share/doc/openvpn-2.3.10/sample/sample-config-files/client.conf /root/user1/client.ovpn # cd /etc/openvpn/easy-rsa/keys # cp user1.crt user1.key /root/user1/ # ll /root/user1 total 16 -rw-r--r--. 1 root root 3441 Apr 27 13:31 client.ovpn -rw-r--r--. 1 root root 5216 Apr 27 13:32 user1.crt -rw-------. 1 root root 1704 Apr 27 13:32 user1.key
存放完畢后,通過sz將這幾個文件下載到存放user1配置文件的目錄
# cd /root/user1 # sz *
5.3 配置client段配置文件
下載完畢后,然后編輯client.ovpn,如下
client dev tun proto tcp remote openvpnserver.user.com 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert user1.crt key user1.key ns-cert-type server comp-lzo verb 3
Client配置文件client.ovpn,修改了幾個地方:
第一、使用的協議,由原來的UDP修改為TCP,這個一定要和Server端保持一致。否則Client無法連接。
第二、remote地址,這個地址要修改為Server端的地址。
第三、Client證書名稱,這個要和我們現在使用用戶的Client證書名稱保持一致。
現在我們來啟動openvpn客戶端連接Server,如下:
點擊“連接服務”,會出現如下的彈窗: 如果配置都正確的話,會出現如下的提示:
通過上圖,我們可以很明顯的看到Client已經正確連接Server端,并且獲得的IP地址是10.8.0.6。
到此為止,openvpn的配置完成,
原創文章,作者:Tuolei,如若轉載,請注明出處:http://www.www58058.com/15639
[…] Centos6.5上搭建openvpn […]
[…] Centos6.5上搭建openvpn […]