公司網(wǎng)站項(xiàng)目最近在實(shí)施 HTTPS,所以學(xué)習(xí)了相關(guān)知識(shí),據(jù)統(tǒng)計(jì)全球頂尖的 1000 個(gè)網(wǎng)站 10% 都部署了 HTTPS,假如有可能就不要再去分析部署 HTTPS 的意義了,HTTPS 是大趨勢(shì)。
對(duì)于技術(shù)人員來(lái)說(shuō),HTTPS 的知識(shí)面非常多,包括密碼學(xué)知識(shí)、HTTP 協(xié)議知識(shí)、OpenSSL、WEB 服務(wù)器、瀏覽器等相關(guān)的知識(shí)??梢哉f(shuō)是一個(gè)龐大的體系,假如你沒有時(shí)間去學(xué)習(xí)太多知識(shí),構(gòu)建一個(gè) HTTPS 也不是太困難的事情,后續(xù)會(huì)寫一些入門類的文章,但是假如要深入理解,可能這些文章并不適合你。
考慮到 HTTPS 相關(guān)的知識(shí)一直在變化,在學(xué)習(xí)過(guò)程中,一定要注意環(huán)境版本(比如 WEB 服務(wù)器版本,TLS 協(xié)議版本等等),否則很多文章會(huì)讓你困惑。另外假如是個(gè)新手,盡量不要去學(xué)習(xí)其他“過(guò)時(shí)”的知識(shí)了,比如要學(xué)習(xí) HTTP/2 ,那就不要去了解 SPDY 協(xié)議了。
這篇文章主要讓你快速搭建一個(gè)支持 HTTPS 的網(wǎng)站,WEB 服務(wù)器用的是 Nginx。
構(gòu)建自定義證書
部署一個(gè) HTTPS 網(wǎng)站最重要的需要兩個(gè)“資源”,分別是密鑰對(duì)和證書。為了加密通信雙方的數(shù)據(jù)需要使用密鑰對(duì)進(jìn)行加密和解密,為了讓用戶信任網(wǎng)站擁有者的公鑰,則需要通過(guò)證書對(duì)公鑰進(jìn)行認(rèn)證。
所以在配置 HTTPS 的時(shí)候要生成密鑰對(duì)和證書,密鑰對(duì)和證書可以由證書機(jī)構(gòu)統(tǒng)一生成。網(wǎng)站擁有者也可以自己生成密鑰對(duì),然后由證書機(jī)構(gòu)簽名即可。
可以通過(guò) OpenSSL 命令行生成密鑰對(duì)和證書,假如證書是自己通過(guò) OpenSSL 生成的,那么這個(gè) HTTPS 網(wǎng)站也是能加密的,但是這個(gè)證書由于是自己簽發(fā)的,所以瀏覽器不一定信任。為了能夠快速搭建出一個(gè) HTTPS 網(wǎng)站,建議可以自生成證書來(lái)實(shí)踐,非常簡(jiǎn)單。
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt`
運(yùn)行這個(gè)命令后,會(huì)有一些交互式的提示信息,主要就是詢問對(duì)那個(gè)域名生成證書。最后就能生成密鑰對(duì)和證書了。
req 表示想使用 X.509 certificate signing request (CSR) 進(jìn)行管理 ,-x509 表示使用自簽名證書代替在線 CSR 請(qǐng)求。
然后在 Nginx.conf 中簡(jiǎn)單配置下就能支持 HTTPS 訪問了。
server {
listen 80 default_server;
listen 443 ssl;
server_name rss.newyingyong.cn;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
}
使用免費(fèi)的 Let's Encrypt 證書
Let's Encrypt 能夠免費(fèi)簽名一個(gè)證書,所以假如要求不高,可以使用它簽名的證書,使用也非常的簡(jiǎn)單,只要驗(yàn)證郵箱地址就能使用了,不過(guò)有 90 天的有效期(到期前可以續(xù))。
為了生成證書,Let's Encrypt 提供了一個(gè)軟件 Certbot 來(lái)進(jìn)行管理,這個(gè)軟件有很多插件,可以生成證書并自動(dòng)化配置 Nginx/Apache ,不過(guò)我還是選擇使用它生成密鑰對(duì)和證書,然后自己在 WEB 服務(wù)器上進(jìn)行配置,使用很簡(jiǎn)單。
git clone https://github.com/certbot/certbot
cd certbot
./certbot-auto certonly --webroot -w /usr/nginx/web -d rss.newyingyong.cn
-w 表示你的代碼根目錄,-d 表示要對(duì)那個(gè)域名生成證書,--webroot 表示插件,運(yùn)行結(jié)束后,會(huì)生成四個(gè)文件,最重要的兩個(gè)文件是 fullchain.pem(證書鏈)和 privkey.pem(私鑰)。
然后在 Nginx 中配置即可
server {
listen 80 default_server;
listen 443 ssl;
server_name rss.newyingyong.cn;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}
非常簡(jiǎn)單把,假如你沒有太多的 HTTPS 知識(shí) ,又想快速搭建基于 HTTPS 的網(wǎng)站 ,那么這篇文章應(yīng)該適合你,可以看看我剛啟用的 HTTPS 網(wǎng)站