HTTPS靜態服務搭建過程詳解


HTTPS服務對於一個前端開發者來說是一個天天打招呼的老伙計了,但是之前我跟HTTPS打交道的場景一直是抓包,自己沒有親自搭建過HTTPS服務,對HTTPS的底層知識也是一知半解。最近正好遇到一個用戶場景,頁面需要調起手機的攝像頭,這就要求頁面服務必須是HTTPS的,所以就嘗試搭建了HTTPS的靜態服務,過程挺曲折的,所以總結一下分享給大家,希望能給看過本文的朋友一點幫助,提高工作效率。

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

HTTPS基本原理

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

要完成以上功能,TLS的連接在TCP連接的基礎之上,需要增加握手次數,如下圖所示:

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

總結一下,HTTPS使用的過程中,主要是需要一個認證中心簽名的證書,用該證書證明服務端返回的公鑰是可信的,然后用該公鑰加密瀏覽器端生成的對稱密鑰,服務端用自己私鑰解密得到瀏覽器發送的對稱密鑰,然后瀏覽器和服務端通過對稱密碼進行加密通信。因此,搭建HTTPS服務首先要從認證中心申請到簽名證書。

證書的獲取

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

由於正規的證書申請,CA機構是要收費的,所以測試過程中我們需要自建CA來頒發證書。

1.自建CA

利用openssl包可以創建CA,前提是需要openssl.conf的要求,創建自建CA所需的文件和目錄,具體可以參見相關文章。這里主要指出幾個必要的文件和目錄:

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

(1)創建CA私鑰

cd CA_PATH  #CA_PATH為demoCA的上級目錄,因為配置文件中CA默認的私鑰路徑是./demoCA/private/cakey.pem,所以一定要在該目錄執行命令,否則會報錯
openssl genrsa -out ./demoCA/private/cakey.pem 2048

(2)創建CA證書申請

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

申請的過程中需要輸入用戶信息,如Country Name,Organization Name,Email Address等,注意自己填寫的信息。

(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即可 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM