HTTPS靜態服務搭建過程詳解

HTTPS服務對於一個前端開發者來講是一個每天打招呼的老夥計了,可是以前我跟HTTPS打交道的場景一直是抓包,本身沒有親自搭建過HTTPS服務,對HTTPS的底層知識也是隻知其一;不知其二。最近正好遇到一個用戶場景,頁面須要調起手機的攝像頭,這就要求頁面服務必須是HTTPS的,因此就嘗試搭建了HTTPS的靜態服務,過程挺曲折的,因此總結一下分享給你們,但願能給看過本文的朋友一點幫助,提升工做效率。前端

本文主要講三個點:HTTPS基本原理證書的獲取httpd的https配置數據庫

HTTPS基本原理

HTTPS = HTTP + TSL(transport layer security)在應用層和傳輸層之間添加了一個會話層,會話層採用SSL協議,完成數據的加密、身份認證、數據完整性校驗。以下圖所示:瀏覽器

要完成以上功能,TLS的鏈接在TCP鏈接的基礎之上,須要增長握手次數,以下圖所示:測試

新增的往返過程能夠簡單根據下圖示意理解。

總結一下,HTTPS使用的過程當中,主要是須要一個認證中心簽名的證書,用該證書證實服務端返回的公鑰是可信的,而後用該公鑰加密瀏覽器端生成的對稱密鑰,服務端用本身私鑰解密獲得瀏覽器發送的對稱密鑰,而後瀏覽器和服務端經過對稱密碼進行加密通訊。所以,搭建HTTPS服務首先要從認證中心申請到簽名證書。ui

證書的獲取

證書的獲取過程是:向證書認證中心—CA提出申請,在CA判明申請者的身份後,爲其分配一個公鑰,而後CA將該公鑰與申請者的身份信息綁在一塊兒,而後用CA的私鑰爲其加密簽名,簽名後頒發給申請者。證書中的內容是用戶公鑰、用戶信息、頒發機構、有效期等。分配的公鑰能夠經過證書請求中的用戶私鑰來獲取。用戶想要鑑別證書的真僞,只能用CA的公鑰對證書上的簽字進行驗證。下圖是證書獲取過程的示意圖:

因爲正規的證書申請,CA機構是要收費的,因此測試過程當中咱們須要自建CA來頒發證書。加密

1.自建CA

利用openssl包能夠建立CA,前提是須要openssl.conf的要求,建立自建CA所需的文件和目錄,具體能夠參見相關文章。這裏主要指出幾個必要的文件和目錄:spa

new_certs_dir = $dir/newcerts # 新證書存放位置
private_key = $dir/private/cakey.pem #CA私鑰
database = $dir/index.txt #證書索引數據庫文件
serial = $dir/serial 頒發證書的序列號

(1)建立CA私鑰code

cd CA_PATH  #CA_PATH爲demoCA的上級目錄,由於配置文件中CA默認的私鑰路徑是./demoCA/private/cakey.pem,因此必定要在該目錄執行命令,不然會報錯
openssl genrsa -out ./demoCA/private/cakey.pem 2048

(2)建立CA證書申請xml

openssl req -new -in ./demoCA/private/cakey.pem -days 365 -out ./demoCA/cacsr.pem

申請的過程當中須要輸入用戶信息,如Country Name,Organization Name,Email Address等,注意本身填寫的信息。blog

(3)建立自簽證書

openssl x509 -req -in ./demoCA/cacsr.pem -out ./demoCA/cacert.pem -signkey ./demoCA/private/cakey.pem -days 3650

 

2.  用戶申請證書

在任意機器或路徑下建立用戶私鑰

(1)建立用戶私鑰

openssl genrsa -out userkey.pem 2048

(2)建立用戶證書申請

openssl req -new -in userkey.pem -days 365 -out usercsr.pem

同時在當前目錄下產生一個privkey.pem文件。

(3)CA簽名

須要CA簽名的話,就須要將用戶申請文件usercsr.pem拷貝到CA所在的機器上,如今把用戶的文件放置在與demoCA同級的demoUser目錄中。CA默認的私鑰路徑是./demoCA/private/cakey.pem,所以仍須要切換到./demoCA的上級目錄。

cd CA_PATH  #CA_PATH爲demoCA的上級目錄,由於配置文件中CA默認的私鑰路徑是./demoCA/private/cakey.pem,因此必定要在該目錄執行命令,不然會報錯
openssl ca -in ./demoUser/usercsr.pem -out ./demoUser/usercrt.pem

httpd的https配置

通過以上兩步的操做,咱們拿到了用戶證書user.crt和用戶密鑰userkey.pem,接下來就要在httpd的配置文件中配置https。

(1)確認ssl模塊(mod_ssl.so)開啓
(2)設置https相應的虛擬端口配置,默認爲443端口
配置代碼以下:
<VirtualHost *:443>
        ServerName www.example.com
        DocumentRoot /www/example.com/htdocs
        SSLengine on
        SSLProtocol all -SSLv3
        SSLcertificatefile USER_CRT_PATH/usercrt.pem
        SSLcertificatekeyfile USER_KEY_PATH/privkey.pem
</VirtualHost>
(3)重啓httpd便可 
相關文章
相關標籤/搜索