天天看點

如何搭建一個HTTPS服務端

關于 https 的基本原理大家都已經不再陌生,今天和大家說說如何搭建一個支援 https 的服務端。

服務端的 https

https 已經幾乎成為了目前網際網路推薦的通信方式,它能最大化保證資訊傳輸的安全,從去年蘋果的強制 https ,到如今各大網站都支援了 https。它會越來越普及。

之前寫過幾篇關于 https 原理的文章,有使用者留言希望了解一些如何在服務端搭建 https 服務的内容,這次就和大家聊聊這個話題。

ssl 證書

搭建一個 https 站點,第一步要做的就是申請 ssl 證書, 而且要在标準的證書頒發機構來申請。 當然,從技術上來說,你可以使用自簽名證書,但自簽名證書會被所有的浏覽器視為不安全的證書,并且會給使用者報錯,就像這樣:

如何搭建一個HTTPS服務端

是以,還是需要申請一個正規的證書的。 可申請證書的頒發機構有很多,比如 godaddy,comodo,verisign 等等。價格從一年幾美金到幾十美金不等。

我們就以 godaddy 為例,帶大家了解一下流程。 在 godaddy 的首頁有一個 web security 标簽,點選這個标簽後可以找到 ssl certificates 選項:

如何搭建一個HTTPS服務端

點選進去, 就可以看到可選的幾個證書形式,有單域名的,還有允許多個二級域名的等:

如何搭建一個HTTPS服務端

避免廣告嫌疑,下面的價格資訊略去了~,這裡隻給大家介紹流程,幫助大家了解。 證書服務商大家可以自行選擇。

接下來,證書頒發機構會讓你填寫一個叫做 csr 的東西, 如果大家搞 ios 開發對這個應該不陌生,申請蘋果開發者證書的時候大家也做過類似的事情。

如何搭建一個HTTPS服務端

csr 全稱 certificate signing request。 顧名思義就是用于申請證書必須的一些資訊,在 lunix 系統中,它可以通過指令生成(大多數的服務端應該都是基于 linux 的,是以我們用它來作為例子):

$ openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr 

openssl 指令,如果你的系統沒有安裝的話,可以通過包管理先安裝。 需要把這裡面的 yourdomain.key 和 yourdomain.csr 替換成你自己的名稱,可以是域名,也可以是其他辨別。

生成成功後,可以用 cat 指令輸出 yourdomain.csr 中的内容:

$ cat yourdomain.csr 

會在指令行輸出 csr 的内容,把這段内容複制到前面截圖中的文本框中,然後點選生成就好了。

注意,這裡的 yourdomain.key 檔案你要保管好。 這是你證書的私鑰,後面配置 https 的時候需要用到它。 并且它不能重新生成,而且不能洩露出去。原因可以參考我前面關于 https 原理的相關文章。

與此同時,證書頒發機構在你送出 csr 之後,會給你生成證書檔案, godaddy 會生成兩個證書,一個是你站點的證書,一個是根證書。 把它們下載下傳到你的伺服器上面。

apache 服務端配置

證書準備好之後,我們要對服務端程式進行配置,讓它支援 https。這裡我給大家以 centos 7 作業系統, apache 2.x 服務端程式為例。

apache 的 https 配置檔案一般在 /etc/httpd/conf.d/ssl.conf 這個位置。 用 vim 編輯器打開它, 然後加入這樣一個節點:

<virtualhost *:443> 

     sslengine on 

     sslcertificatefile /root/yoursite.crt 

     sslcertificatekeyfile /root/yoursite.key 

     sslcacertificatefile /root/rootcert.crt 

     serveradmin [email protected] 

     servername yoursite.com 

     documentroot /var/www/html/ 

</virtualhost> 

這裡用到了我們前面準備的證書和秘鑰。 sslcertificatefile 是你站點的證書, sslcacertificatefile 是根證書, sslcertificatekeyfile 是隻儲存在你伺服器的私鑰。

有了這些資訊後,apache 就可以正确的處理 https 請求了。 在這之前我們還需要在做最後一步操作, 編輯 /etc/httpd/conf/httpd.conf 檔案, 這個是 apache 的主配置檔案, 加入這樣一行:

listen 443 

這個是讓你的服務端同時監聽 443 端口。 因為 https 的預設端口是 443, 是以這個設定是必須要有的。

一切都就緒後,重新開機你的伺服器:

systemctl restart httpd 

然後再用浏覽器輸入 https://yoursite.com 通路你的站點時,就應該可以看到 https 驗證成功的小鎖頭了。

防火牆設定

如果配置都就緒,你重新開機了之後,依然不能正常通路,有可能是你的防火牆把 443 端口攔截了,把它打開:

iptables -a input -p tcp -m tcp --sport 443 -j accept 

iptables -a output -p tcp -m tcp --dport 443 -j accept 

結束

目前成熟的 web 服務程式都有對 https 很好的支援,隻需要經過簡單的配置,即可完成 https 伺服器的搭建。 而 https

之是以相對性能消耗更大,是因為每次資料傳輸都需要進行加密和解密的操作。 作為 app

開發者們,可能對服務端的技術了解的并沒有那麼深,可以把它作為一個備忘錄,日後用到的時候再來看看。

作者:佚名

來源:51cto

繼續閱讀