摘 要:本文以互聯網的迅速發展為背景,介紹了中小企業在提供博客、新聞和信息門戶類服務等不涉及金融操作的網站服務中,借助Let’s Encrypt來實現網站的免費加密與保護,并給出了具體實現方法。
關鍵詞:HTTP;HTTPS;Let’s Encrypt
中圖分類號:TP309 文獻標識碼:A 文章編號:2096-4706(2018)07-0159-03
Abstract:This article introduces the rapid development of the internet,small and medium-sized enterprises in the provision of blogs,news and information portal services,which are not involved in financial operations,a way of free encryption and protection of websites based on Let’s Encrypt is proposed,and the implementation method is given.
Keywords:HTTP;HTTPS;Let’s Encrypt
0 引 言
順應當今社會信息技術的發展需要,每個企業和組織都希望網絡媒體資源的網絡安全性得到保障。同時,對于所有在線訪問的個人用戶來說,進行網絡訪問時的數據信息安全同樣重要。企業和組織可以通過證書授權機構搭建基本的HTTPS網站來保證網絡和數據的安全,但是需要花費一定的費用,而且搭建的過程復雜、容易出錯。現在可以免費使用Let’s Encrypt對中小企業的網站進行保護,而且搭建過程也比較輕松。
1 為何進行加密
為什么要加密網站呢?這是因為未經加密的HTTP會話可以被以下多種方式濫用:
(1)竊聽用戶數據包;
(2)捕捉用戶登錄;
(3)注入廣告和“重要”消息;
(4)注入木馬;
(5)注入SEO垃圾郵件和鏈接;
(6)注入挖礦腳本。
為了有效的避免企業網站在用戶訪問時濫用,最好的防御手段就是HTTPS。
2 HTTPS的工作原理
HTTPS是指在企業的網站和每個授權的訪問用戶之間建立非對稱加密,這是一種非常強的保護。非對稱加密的通用工具為GPG(GNU Privacy Guard)和OpenSSH。它們依賴于公鑰-私鑰對,其中公鑰可以任意分享,但私鑰必須受到保護且不能分享。公鑰用于加密,私鑰用于解密。
但上述方法無法適用于隨機的網頁瀏覽,因為建立會話之前需要交換公鑰,需要生成并管理密鑰對。HTTPS會話可以自動完成公鑰分發,而且購物或銀行之類的敏感網站還會使用第三方證書頒發機構(CA)驗證證書,例如Comodo、Verisign和Thawte。
當用戶訪問一個HTTPS網站時,網站會給用戶的網頁瀏覽器返回了一個數字證書。這個證書能夠加強會話的安全性與私密性,而且能夠提供該網站的信息,包括組織名稱、頒發證書的組織和證書頒發機構名稱以及證書本身的信息等。用戶可以點擊網頁瀏覽器地址欄的小鎖頭來查看這些信息,如圖1所示。
包括Opera、Chromium和Chrome在內的主流瀏覽器,驗證網站數字證書的合法性都依賴于證書頒發機構。小鎖頭標記可以讓用戶一眼看出證書的狀態;綠色意味著使用了SSL強加密且運營實體經過驗證。網頁瀏覽器還會對惡意網站、SSL 證書配置有誤的網站以及不被信任的自簽名證書網站給出警告。
那么網頁瀏覽器如何判斷網站是否可信呢?瀏覽器自帶根證書庫,包含了一系列根證書,存儲在/usr/share/ca-certificates/mozilla/之類的地方。網站證書是否可信可以通過根證書庫進行檢查。就像Linux系統上其它軟件那樣,根證書庫也由包管理器維護。對于Ubuntu,對應的包是ca-certificates,這個Linux根證書庫本身是由Mozilla維護的。
可見,整個工作流程需要復雜的基礎設施才能完成。在用戶在進行購物或金融等敏感在線操作時,用戶信任了無數陌生人對其的保護。
3 Let’s Encrypt保護的實現
Let’s Encrypt是一家全球證書頒發機構,類似于其它商業根證書頒發機構。Let’s Encrpt由非營利性組織因特網安全研究小組Internet Security Research Group(ISRG)創立,目標是簡化網站的安全加密。Let’s Encrypt得到了Mozilla、Cisco、Akamai、Electronic Frontier Foundation和Chrome等眾多公司和機構的支持,發展十分迅猛。
使用Let’s Encrypt有三種方式。
(1)使用電子前沿基金會Electronic Frontier Foun dation(EFF)開發的Cerbot 客戶端。使用該客戶端需要在網站服務器上執行shell操作。
下面以centos 6-nginx為例:
打開https://certbot.eff.org/,選好系統版本,即下面的URL。
https://certbot.eff.org/#centos6-nginx
1)下載;
wget-O/sbin/certbot https://dl.eff.org/certbot-auto
chmod a+x /sbin/certbot
2)修改nginx主機配置文件(vhost則配置在vhos配置文件上),并將其配置在第一個location匹配規則上;
location = /.well-known/acme-challenge/ {
default_type \"text/plain\";
root /path/website/;}
location = /.well-known/acme-challenge/ {
return 404; }
重新加載生效:server nginx reload
3)申請證書;
certbot certonly--email mail@example.com--agree-tos--no-eff-email--webroot-w/path/website -d www.example.com
申請的證書一般都會在/etc/letsencrypt/live/example.com/下,會有下面5個文件(example為企業的網站名):
cert.pem chain.pem fullchain.pem privkey.pem README
4)為NGINX添加SSL;
示例中nginx為源碼安裝/usr/local/nginx下,創建sslkey保存目錄。
[root@localhost sslkey]#mkdir -pv /usr/local/nginx/conf/sslkey
[root@localhost sslkey]#cd /usr/local/nginx/conf/sslkey
[root@localhost sslkey]#ln -s /etc/letsencrypt/live/example.com/* ./
[root@localhost sslkey]# ll
total 0
lrwxrwxrwx 1 root root 42 Jun 27 17:06 cert.pem -> /etc/letsencrypt/live/example.com/cert.pem
lrwxrwxrwx 1 root root 43 Jun 27 17:06 chain.pem -> /etc/letsencrypt/live/example.com/chain.pem
lrwxrwxrwx 1 root root 47 Jun 27 17:06 fullchain.pem -> /etc/letsencrypt/live/example.com/fullchain.pem
lrwxrwxrwx 1 root root 45 Jun 27 17:06 privkey.pem -> /etc/letsencrypt/live/example.com/privkey.pem
lrwxrwxrwx 1 root root 40 Jun 27 17:06 README -> /etc/letsencrypt/live/example.com/README
[root@localhost sslkey]# ls
cert.pem chain.pem fullchain.pem privkey.pem README
[root@localhost sslkey]# pwd
/usr/local/nginx/conf/sslkey
[root@localhost sslkey]#
5)修改nginx主機配置文件(vhost則配置在vhos配置文件上),添加ssl支持;
listen 80;
listen 443 ssl;
server_name www.example.com;
root /path/website/;
index index.php index.htm index.html;
ssl on;
ssl_certificate /usr/local/nginx/conf/sslkey/cert.pem;
ssl_certificate_key /usr/local/nginx/conf/sslkey/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HICH:+MEDIUM:!LOW:!aNULL:!eNULL;
重啟生效。
(2)如果企業網站使用的是共享托管主機,則很可能無法執行shell操作。這種情況下,最簡單的方法是使用支持Let’s Encrpt的托管主機。
(3)如果企業網站的托管主機不支持Let’s Encrypt,但支持自定義證書,那么可以使用Certbot手動創建并上傳你的證書。這是一個復雜的過程,需要徹底地研究文檔。
安裝證書后,使用SSL服務器測試來測試企業的服務器。
Let’s Encrypt的電子證書的有效期為90天。Certbot安裝過程中添加了一個證書自動續期的計劃任務,提供了測試證書自動續期是否成功的命令。允許使用已有的私鑰或證書簽名請求certificate signing request(CSR),允許創建通配符證書。
4 結 論
但Let’s Encrypt也有一定的局限性:它只執行域名驗證,即只有有域名控制權才可以獲得證書。這是比較基礎的SSL。它不支持組織驗證Organization Validation(OV)和擴展驗證Extended Validation(EV),其作為非營利性組織提供的免費服務,不提供商業支持,只提供不錯的文檔和社區支持。該證書不足以勝任購物及銀行網站的安全加密,但很適合加密博客、新聞和信息門戶這類不涉及金融操作的網站,因此,提供此類服務的中小企業網站可以免費使用Let’s Encrypt來對中小企業網站進行保護。
參考文獻:
[1] 劉青子.計算機信息網絡安全技術及未來發展方向研究 [J].科技經濟市場,2017(9):13-14.
[2] Let’s Encrypt是如何工作的 [OL].[2018-04-15].https://blog.csdn.net/canghaiguzhou/article/details/79945001.
[3] Let’s Encrypt SSL證書申請流程 [OL].[2017-09-25].https://www.trustauth.cn/wiki/22459.html.
作者簡介:李超(1979-),男,貴州遵義人,副教授,工程碩士。研究方向:軟件工程、計算機網絡。