如何搭建一個(gè)HTTPS服務(wù)端
關(guān)于 HTTPS 的基本原理大家都已經(jīng)不再陌生,今天和大家說說如何搭建一個(gè)支持 HTTPS 的服務(wù)端。
服務(wù)端的 HTTPS
HTTPS 已經(jīng)幾乎成為了當(dāng)前互聯(lián)網(wǎng)推薦的通信方式,它能最大化保證信息傳輸?shù)陌踩?,從去年蘋果的強(qiáng)制 HTTPS ,到如今各大網(wǎng)站都支持了 HTTPS。它會(huì)越來越普及。
之前寫過幾篇關(guān)于 HTTPS 原理的文章,有用戶留言希望了解一些如何在服務(wù)端搭建 HTTPS 服務(wù)的內(nèi)容,這次就和大家聊聊這個(gè)話題。
SSL 證書
搭建一個(gè) HTTPS 站點(diǎn),第一步要做的就是申請(qǐng) SSL 證書, 而且要在標(biāo)準(zhǔn)的證書頒發(fā)機(jī)構(gòu)來申請(qǐng)。 當(dāng)然,從技術(shù)上來說,你可以使用自簽名證書,但自簽名證書會(huì)被所有的瀏覽器視為不安全的證書,并且會(huì)給用戶報(bào)錯(cuò),就像這樣:
所以,還是需要申請(qǐng)一個(gè)正規(guī)的證書的。 可申請(qǐng)證書的頒發(fā)機(jī)構(gòu)有很多,比如 GoDaddy,Comodo,Verisign 等等。價(jià)格從一年幾美金到幾十美金不等。
我們就以 GoDaddy 為例,帶大家了解一下流程。 在 GoDaddy 的首頁有一個(gè) Web Security 標(biāo)簽,點(diǎn)擊這個(gè)標(biāo)簽后可以找到 SSL Certificates 選項(xiàng):
點(diǎn)擊進(jìn)去, 就可以看到可選的幾個(gè)證書形式,有單域名的,還有允許多個(gè)二級(jí)域名的等:
避免廣告嫌疑,下面的價(jià)格信息略去了~,這里只給大家介紹流程,幫助大家了解。 證書服務(wù)商大家可以自行選擇。
接下來,證書頒發(fā)機(jī)構(gòu)會(huì)讓你填寫一個(gè)叫做 CSR 的東西, 如果大家搞 iOS 開發(fā)對(duì)這個(gè)應(yīng)該不陌生,申請(qǐng)?zhí)O果開發(fā)者證書的時(shí)候大家也做過類似的事情。
CSR 全稱 Certificate Signing request。 顧名思義就是用于申請(qǐng)證書必須的一些信息,在 Lunix 系統(tǒng)中,它可以通過命令生成(大多數(shù)的服務(wù)端應(yīng)該都是基于 Linux 的,所以我們用它來作為例子):
- $ openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr
 
openssl 命令,如果你的系統(tǒng)沒有安裝的話,可以通過包管理先安裝。 需要把這里面的 yourdomain.key 和 yourdomain.csr 替換成你自己的名稱,可以是域名,也可以是其他標(biāo)識(shí)。
生成成功后,可以用 cat 命令輸出 yourdomain.csr 中的內(nèi)容:
- $ cat yourdomain.csr
 
會(huì)在命令行輸出 CSR 的內(nèi)容,把這段內(nèi)容復(fù)制到前面截圖中的文本框中,然后點(diǎn)擊生成就好了。
注意,這里的 yourdomain.key 文件你要保管好。 這是你證書的私鑰,后面配置 HTTPS 的時(shí)候需要用到它。 并且它不能重新生成,而且不能泄露出去。原因可以參考我前面關(guān)于 HTTPS 原理的相關(guān)文章。
與此同時(shí),證書頒發(fā)機(jī)構(gòu)在你提交 CSR 之后,會(huì)給你生成證書文件, Godaddy 會(huì)生成兩個(gè)證書,一個(gè)是你站點(diǎn)的證書,一個(gè)是根證書。 把它們下載到你的服務(wù)器上面。
Apache 服務(wù)端配置
證書準(zhǔn)備好之后,我們要對(duì)服務(wù)端程序進(jìn)行配置,讓它支持 HTTPS。這里我給大家以 CentOS 7 操作系統(tǒng), Apache 2.x 服務(wù)端程序?yàn)槔?/p>
Apache 的 HTTPS 配置文件一般在 /etc/httpd/conf.d/ssl.conf 這個(gè)位置。 用 vim 編輯器打開它, 然后加入這樣一個(gè)節(jié)點(diǎn):
- <VirtualHost *:443>
 - SSLEngine On
 - SSLCertificateFile /root/yoursite.crt
 - SSLCertificateKeyFile /root/yoursite.key
 - SSLCACertificateFile /root/rootcert.crt
 - ServerAdmin admin@yoursite.com
 - ServerName yoursite.com
 - DocumentRoot /var/www/html/
 - </VirtualHost>
 
這里用到了我們前面準(zhǔn)備的證書和秘鑰。 SSLCertificateFile 是你站點(diǎn)的證書, SSLCACertificateFile 是根證書, SSLCertificateKeyFile 是只保存在你服務(wù)器的私鑰。
有了這些信息后,Apache 就可以正確的處理 HTTPS 請(qǐng)求了。 在這之前我們還需要在做最后一步操作, 編輯 /etc/httpd/conf/httpd.conf 文件, 這個(gè)是 Apache 的主配置文件, 加入這樣一行:
- Listen 443
 
這個(gè)是讓你的服務(wù)端同時(shí)監(jiān)聽 443 端口。 因?yàn)?HTTPS 的默認(rèn)端口是 443, 所以這個(gè)設(shè)置是必須要有的。
一切都就緒后,重啟你的服務(wù)器:
- systemctl restart httpd
 
然后再用瀏覽器輸入 https://yoursite.com 訪問你的站點(diǎn)時(shí),就應(yīng)該可以看到 HTTPS 驗(yàn)證成功的小鎖頭了。
防火墻設(shè)置
如果配置都就緒,你重啟了之后,依然不能正常訪問,有可能是你的防火墻把 443 端口攔截了,把它打開:
- iptables -A INPUT -p tcp -m tcp --sport 443 -j ACCEPT
 - iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
 
結(jié)束
目前成熟的 Web 服務(wù)程序都有對(duì) HTTPS 很好的支持,只需要經(jīng)過簡(jiǎn)單的配置,即可完成 HTTPS 服務(wù)器的搭建。 而 HTTPS 之所以相對(duì)性能消耗更大,是因?yàn)槊看螖?shù)據(jù)傳輸都需要進(jìn)行加密和解密的操作。 作為 APP 開發(fā)者們,可能對(duì)服務(wù)端的技術(shù)了解的并沒有那么深,可以把它作為一個(gè)備忘錄,日后用到的時(shí)候再來看看。



















 
 
 









 
 
 
 