https提供安全的web通訊
1.原理部分:
1)瞭解加密演算法:
加密演算法的分類:對稱加密和非對稱加密
a.對稱加密:加密和解密使用同一個金鑰,優點是速度快,缺點是金鑰的共享困難。典型的對稱加密演算法有DES/AES/RC5/3DES等。
b.非對稱加密:生成一個祕密對(公鑰和私鑰),加密過程中可以是私鑰加密公鑰解密;也可以是公鑰加密私鑰解密;一般情況下私鑰由伺服器儲存,公鑰共享給客戶端,採用公加私解的方式。它的特徵是不論你得到公鑰還是私鑰都是無法逆推金鑰對的另一半,這保證了金鑰的安全性。缺點是加密速度極慢,不適合加密資料量大的流量。典型的非對稱加密演算法有RSA/DSA.
如何選擇加密演算法?
如果選擇對稱加密,密碼的共享(傳輸)過程不安全;如果選擇非對稱加密,加密速度慢。
一個完美的解決方案:
用對稱加密的金鑰用於加密資料,用非對稱加密來保護對稱加密的金鑰,實現又快又安全的資料加密。保證了資料的私密性。
2)證照伺服器:CA
在上述方案中還存在這樣一個問題:如何確認公鑰是由真正的金鑰對擁有者所共享(傳輸)的。解決該問題的方案是證照認證,CA伺服器提供證照認證服務。
證照認證的過程:
a.伺服器生成金鑰對(公鑰和私鑰)和認證請求,
b.CA伺服器根據認證請求為伺服器頒發根證照,
c.伺服器獲取根證照並共享給客戶機,客戶匯入根證照.
d.通訊過程中,客戶機依據根證照確認公鑰的合法性.
證照伺服器分為:公共證照伺服器(如微軟、google等)和企業自建的私有證照伺服器(openssl實現)。證照認證伺服器提供了資料的不可否認性。
3)數字簽名:HASH
在上述的方案中,依然還存在一個問題:無法判斷資料在傳輸過程中的完整性(是否被篡改過)。
典型的HASH演算法:MD5,SHA1,SHA256,SHA512等。
伺服器使用HASH演算法對所需傳輸的資料進行hash計算的出一串數字,並將這串數字公佈,資料從伺服器上傳輸到客戶機後,客戶機使用相同的hash演算法計算hash值,如果和伺服器公佈的數字簽名一致,則資料沒有被篡改,反之亦然。這樣就保證了資料的完整性。
4)瞭解https的工作原理:
https(Hypertext Transfer Protocol over Secure Socket Layer),即http下加入了SSL,埠預設為443.
SSL:安全套接字層,是netscape公司設計的主要用於安全傳輸。
https通訊過程:
a.客戶端請求https連結(通過https://實現),服務端返回證照(攜帶了公鑰、證照的頒發機構、選擇一組加密演算法和HASH演算法等資訊)給客戶端。
b.客戶端收到證照後:驗證證照的合法性,生成隨機密碼(使用協商好的對稱加密演算法)並使用公鑰加密,使用約定的HASH計算握手訊息並使用隨機密碼對訊息進行加密。
c.客戶端將由公鑰加密的隨機密碼和由隨機密碼加密過的HASH數字簽名發給伺服器。
d.伺服器(網站)收到隨機密碼和數字簽名後:用私鑰解密得到隨機密碼,用隨機密碼解密得到數字簽名,用數字簽名驗證握手訊息的完整性。並使用隨機密碼加密一段握手訊息發給客戶端(瀏覽器)。
e.瀏覽器解密握手並計算握手hash,確保資料的完整性。之後的通訊資料使用隨機密碼進行加密(對稱演算法)。
2.實驗:實現https的安全web服務
1)配置域名支援ca:
[root@ns ~]# vim /var/named/chroot/var/named/gxfc.com.zone ##新增ca主機記錄
1
|
ca IN A 192.168.100.151 |
:wq
[root@ns ~]# /etc/init.d/named restart ##重啟服務
[root@ns ~]# nslookup
> server 192.168.100.100
Default server: 192.168.100.100
Address: 192.168.100.100#53
> ca.gxfc.com
Server: 192.168.100.100
Address: 192.168.100.100#53
Name: ca.gxfc.com
Address: 192.18.100.151
> exit
2)配置CA伺服器:(192.168.100.151)
a.使用母盤克隆虛擬機器,命名為ca伺服器,修改如下:
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
1
2
3
4
5
6
7
8
9
10
|
DEVICE=eth0 HWADDR=00:0C:29:75:e6:eb TYPE=Ethernet ONBOOT= yes
NM_CONTROLLED=no BOOTPROTO=static IPADDR=192.168.100.151 NETMASK=255.255.255.0 DNS1=192.168.100.100 GATEWAY=192.168.100.100 |
:wq
[root@localhost ~]# vim /etc/sysconfig/network
1
|
HOSTNAME=ca.gxfc.com |
:wq
[root@localhost ~]# vim /etc/udev/rules.d/70-persistent-net.rules ##刪除eth0,修改eth1為eth0(已經修改的略過次步驟)
[root@localhost ~]# reboot
b.配置CA:
[root@ca ~]# hostname
ca.sggfu.com
[root@ca ~]# yum -y install openssl openssl-devel ##安裝openssl
[root@ca ~]# rpm -ql openssl
/etc/pki/CA
/etc/pki/CA/certs ##證照存放目錄
/etc/pki/CA/crl ##吊銷的證照存放的目錄
/etc/pki/CA/newcerts##新證照目錄
/etc/pki/CA/private ##私鑰存放目錄
/etc/pki/tls/openssl.cnf ##主配置檔案
/usr/bin/openssl ##主程式命令
[root@ca ~]# vim /etc/pki/tls/openssl.cnf ##修改主配置檔案使用“:set nu”列印行號
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
40 [ CA_default ]
41
42 dir = /etc/pki/CA # Where everything is kept
43 certs = $ dir /certs # Where the issued certs are kept
44 crl_dir = $ dir /crl # Where the issued crl are kept
45 database = $ dir /index .txt # database index file.
46 #unique_subject = no # Set to `no` to allow creation of
47 # several ctificates with same subject.
48 new_certs_dir = $ dir /newcerts # default place for new certs.
49
50 certificate = $ dir /cacert .pem # The CA certificate
51 serial = $ dir /serial # The current serial number
52 crlnumber = $ dir /crlnumber # the current crl number
53 # must be commented out to leave a V1 CRL
54 crl = $ dir /crl .pem # The current CRL
55 private_key = $ dir /private/cakey .pem # The private key
130 countryName_default = CN ##修國家
135 stateOrProvinceName_default = beijing ##設定省
138 localityName_default = beijing ##設定城市
141 0.organizationName_default = gxfc.com Ltd ##設定組織名稱
148 organizationalUnitName_default = tech ##設定部門
|
:wq
[root@ca ~]# cd /etc/pki/CA/
[root@ca CA]# ls private/
[root@ca CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048) ##生成私鑰同時將許可權設定為600
Generating RSA private key, 2048 bit long modulus
………………..+++
……………………………………………………………………………….+++
e is 65537 (0x10001)
[root@ca CA]# ls -l private/ ##驗證私鑰
總用量 4
-rw——-. 1 root root 1679 1月 2 20:09 cakey.pem
[root@ca CA]#
[root@ca CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650 ##生成自簽證照(根證照)
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) [BeiJing]:
Locality Name (eg, city) [BeiJing]:
Organization Name (eg, company) [gxfc.com]:
Organizational Unit Name (eg, section) [tech]:
Common Name (eg, your name or your server`s hostname) []:ca.gxfc.com ##主機名填寫CA伺服器的主機名
Email Address []:admin@gxfc.com
[root@ca CA]# ls -l cacert.pem
-rw-r–r–. 1 root root 1419 1月 2 20:13 cacert.pem
[root@ca CA]#
[root@ca CA]# mkdir -p certs crl newcerts
[root@ca CA]# touch index.txt ##證照索引
[root@ca CA]# echo 00 >serial ##證照序列號
[root@ca CA]# ls
cacert.pem certs crl index.txt newcerts private serial
[root@ca CA]#
3)配置web伺服器支援https:
a.為web伺服器生成金鑰和證照請求:
[root@www ~]# mkdir /usr/local/httpd/conf/ssl
[root@www ~]# cd /usr/local/httpd/conf/ssl/
[root@www ssl]# (umask 077;openssl genrsa 2048 >httpd.key)
[root@www ssl]# scp root@192.168.100.151:/etc/pki/tls/openssl.cnf /etc/pki/tls/openssl.cnf ##複製openssl配置檔案
[root@www ssl]# openssl req -new -key httpd.key -out httpd.csr
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) [BeiJing]:
Locality Name (eg, city) [BeiJing]:
Organization Name (eg, company) [gxfc.com]:
Organizational Unit Name (eg, section) [tech]:
Common Name (eg, your name or your server`s hostname) []:www.gxfc.com ##必須填寫web伺服器的主機名,注意web虛擬主機只能有唯一一個站點可以設定為https
Email Address []:admin@gxfc.com
Please enter the following `extra` attributes
to be sent with your certificate request
A challenge password []: ##證照保護的密碼短語,直接回車
An optional company name []:
[root@www ssl]#
[root@www ssl]# scp httpd.csr root@192.168.100.151:/tmp ##將證照認證請求複製給CA伺服器
b.登入到192.168.100.151,為web伺服器簽發證照:
[root@ca CA]# openssl ca -in /tmp/httpd.csr -out /tmp/httpd.crt -days 3650 ##簽發證照httpd.crt,執行中y回車即可
[root@ca CA]# ls /tmp/httpd.c* ##驗證
/tmp/httpd.crt /tmp/httpd.csr
[root@ca CA]# scp /tmp/httpd.crt root@192.168.100.150:/usr/local/httpd/conf/ssl ##複製證照給web伺服器
[root@ca CA]# rm -rf /tmp/httpd.* ##刪除證照,避免非法使用者獲取證照
c.修改web伺服器配置檔案:登入192.168.100.150
[root@www ~]# cd /usr/local/httpd/conf/extra/
[root@www extra]# cp httpd-ssl.conf httpd-ssl.conf.bak ##備份證照
[root@www extra]# vim httpd-ssl.conf ##修改如下
1
2
3
4
5
6
7
8
9
|
74 <VirtualHost 192.168.100.150:443> 77 DocumentRoot "/usr/local/httpd/htdocs/gxfc/" ##注意和http的網頁根目錄一致
78 ServerName www.gxfc.com:443 79 ServerAdmin admin@gxfc.com 80 ErrorLog "/usr/local/httpd/logs/error_log"
81 TransferLog "/usr/local/httpd/logs/access_log"
85 SSLEngine on ##確認為on,表示開啟https
99 SSLCertificateFile "/usr/local/httpd/conf/ssl/httpd.crt" ##指定證照路徑
107 SSLCertificateKeyFile "/usr/local/httpd/conf/ssl/httpd.key" ##指定私鑰路徑,注意私鑰必須小心保管
|
:wq
[root@www extra]# vim /usr/local/httpd/conf/httpd.conf ##修改主配置檔案,呼叫httpd-ssl.conf
1
|
399 Include conf /extra/httpd-ssl .conf
|
:wq
[root@www extra]# /etc/init.d/httpd restart ##重啟伺服器
4)共享根證照:
[root@www ~]# cd /usr/local/httpd/htdocs/gxfc/
[root@www sggfu]# scp root@192.168.100.151:/etc/pki/CA/cacert.pem cacert.crt ##複製CA伺服器的證照(根證照)
[root@www sggfu]# vim index.html ##通過首頁共享根證照
1
2
3
4
5
6
7
8
9
10
|
<html> < head >
<meta http-equiv= "content-type" content= "text/html; charset=utf-8" />
<title>www.gxfc.com< /title >
< /head >
<body> <h1>www.gxfc.com< /h1 >
為了你更好的訪問網站,請下載安裝<a href= "cacert.crt" target= "_blank" >根證照< /a >
< /body >
< /html >
|
:wq
5)測試:
http://www.gxfc.com ##下載證照並匯入證照
https://www.gxfc.com ##訪問測試
相關文章
- 更安全的Web通訊HTTPSWebHTTP
- HTTPS的安全通訊機制HTTP
- 深入理解Https如何保證通訊安全HTTP
- 通過配置web.config使WCF向外提供HTTPS的Restful ServiceWebHTTPREST
- 確保web安全的HTTPSWebHTTP
- https的通訊過程HTTP
- 安卓應用安全指南5.4.1通過HTTPS的通訊示例程式碼安卓HTTP
- 詳解Nginx伺服器和iOS的HTTPS安全通訊Nginx伺服器iOSHTTP
- Wireshark檢視https的通訊HTTP
- 安全通訊
- HTTPS通訊的C++實現HTTPC++
- 《圖解HTTP》讀書筆記7之HTTPS的安全通訊機制圖解HTTP筆記
- web通訊協議Web協議
- 圖解HTTP 七、確保Web安全的HTTPS圖解HTTPWeb
- 樂訊通雲通訊:物聯網路卡在安防監控提供的主要作用
- 基於OpenSSL的HTTPS通訊C++實現HTTPC++
- 即時通訊安全篇(九):為什麼要用HTTPS?深入淺出,探密短連線的安全性HTTP
- 高效安全協作,為博雅智匯連線海內外提供無障礙通訊
- Web發展中通訊的方式有哪些Web
- RN Webview與Web的通訊與除錯WebView除錯
- [安全] HTTPS的理解HTTP
- android應用安全——元件通訊安全(Intent)Android元件Intent
- WEB 即時通訊最佳實踐Web
- Android中Java與web通訊AndroidJavaWeb
- 通訊安全重重考驗,阿里雲通訊如何打造企業級“安全感”?阿里
- 記一次https通訊除錯過程HTTP除錯
- https安全性 帶給im 訊息加密的啟發HTTP加密
- 《圖解HTTP》讀書筆記五:確保 Web 安全的 HTTPS圖解HTTP筆記Web
- web多應用下跨域通訊視訊教程Web跨域
- linux tomcat 開通443 (用https安全訪問)LinuxTomcatHTTP
- WinCE資料通訊之Web Service篇Web
- 使用SSL協議保證web服務通訊安全(一、基礎理論篇)協議Web
- Android通過https協議與伺服器端進行通訊AndroidHTTP協議伺服器
- 程序間的通訊(訊號通訊)
- AFN框架 之同時相容Http和Https通訊配置框架HTTP
- 利用 acme-tiny 實現 HTTPS 加密通訊 (CentOS & Apache)ACMHTTP加密CentOSApache
- HTTPS是如何保證連線安全:每位Web開發者都應知道的HTTPWeb
- 5款確保安全聊天的通訊應用