預備知識:
1.什麼是https, 相對于https有什麼優勢/劣勢?
2.更新https需要準備的檔案? 如何更新?
3.ssl證書類型? (EV/OV/通配符證書....)
4.如何選擇ssl證書? 如何選擇供應商? (推薦一家:godaddy比較便宜,Versign/GlobalSign等都比較偏貴)
5.如何免費擷取信任的ssl證書?
如果對以上幾點還不熟悉的同學可以先去了解以下,本文主要講解第五點如何擷取到免費的被信任的SSL證書。 什麼時候可以考慮到使用免費的證書。 例如:你開發了一個app裡面将要傳輸一些敏感資訊,例如:使用者姓名/聯系方式等等。為了保護使用者的資料不被洩漏就需要加上加密功能。 但是對于已經release的用戶端我們不可能要求用戶端更新,也就是老的用戶端依然使用的是http協定和老的用戶端程式。 如何保證使用者透明的情況下加密使用者資料呢? 自然我們想到了https,那好既然需要部署https證書如何來呢? 你也可以自簽名一個證書, 但是自簽名的證書對于已經發出去的app會認為是不合法的CA導緻錯誤。 是以,咱們必須搞到一個被信任的CA中心頒發的證書。 根據個人經驗目前有如下幾種方式:
方式一: 到沃通網站上申請免費的SSL證書。 (最近關閉了,可能幾個月後會開放)
方式二: 到各大供應商去申請試用的證書(解決緊急情況),一般有效期是7天或者是30天,RapidSSL是30天。
方式三: 還是開源的力量大, 使用"Let's Encrypt"提供的證書。
接下來, 重點介紹一下如何使用"Let's Encrypt"生成和renewal證書。"Let's Encrypt"是一家非營利的由各大知名網絡和網際網路公司贊助的一個提供免費證書的機構(https://letsencrypt.org/)。 有Akami/CISCO/Chrom...大家還是可以放心使用。 但是,該機構提供的證書有效期隻有三個月也就是90天,是以90之後需要更新證書。
好,進入主題下面給大家示範以下如何在Nginx on Debian 7下生成SSL證書:需要準備好nginx和
1. 準備好一個nginx伺服器。大家可以自行去下載下傳和安裝nginx。在編譯nginx的時候注意加上http ssl子產品。 具體指令可以參考:
./configure --prefix=/data/server/nginx/nginx1.7/
--with-pcre=/data/server/nginx/source/pcre-8.35/
--with-zlib=/data/server/nginx/source/zlib-1.2.8/
--with-http_ssl_module
--with-http_realip_module
--with-select_module
--with-poll_module
--add-module=/data/server/nginx/source/nginx_accept_language_module-master
2.下載下傳安裝用戶端
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
3.準備好依賴包 (最好使用:ubuntu14.04以上的)
./certbot-auto
4.生成證書
4.1.因為大多數情況Nginx都是作為一個負載均衡的作用在前端,後端放的業務服務。certbot需要在域名對應的webroot下面建立
.well-known/acme-challenge
檔案。 是以,如果對于目前情況。我做了一個映射把這個路徑映射到了nginx的一個目錄下面。
location ~ /.well-known {
access_log logs/eapa_access.log main;
root html;
index index.html index.htm;
}
4.2.生成證書,使用./certbot-auto certonly指令生成證書。參數說明: -w 指定webroot(即:4.1中配置的root目錄), -d 指定域名,可以是多個。 -w -d 是成對出現,也可以一次生成多個證書。下面我們為eapa.test.com生成一個證書,該項目的路徑為:/data/server/nginx/nginx1.7/html。
./certbot-auto certonly
-w /data/server/nginx/nginx1.7/html
-d eapa.test.com
指令執行成功以後證書就放在了:/etc/letsencrypt/live/eapa.test.com/下面,可以看到如下幾個檔案:
lrwxrwxrwx 1 root root 42 Nov 30 05:16 cert.pem (證書檔案)
lrwxrwxrwx 1 root root 43 Nov 30 05:16 chain.pem
lrwxrwxrwx 1 root root 47 Nov 30 05:16 fullchain.pem
lrwxrwxrwx 1 root root 45 Nov 30 05:16 privkey.pem (免密鑰的私鑰)
4.3安裝證書到nginx伺服器就很簡單了,下面貼出來了源代碼
server {
listen 443 ssl;
server_name eapa.test.com;
ssl_certificate /data/server/nginx/nginx1.7/ssl/cert.pem;
ssl_certificate_key /data/server/nginx/nginx1.7/ssl/privkey.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location ~ /.well-known {
access_log logs/eapa_access.log main;
root html;
index index.html index.htm;
}
location ~ / {
access_log logs/eapa_access.log main;
root html;
index index.html index.htm;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_pass http://eapa;
proxy_redirect http:// $scheme://; //(解決:springmvc redirect後https變成http)
}
通路:https://eapa.test.com就可以看到成功了. (注意: 該域名是假域名)
最後, 因為證書有效期三個月, 你可以手動或者寫個cron自動更新證書通過下面指令:
[yi_liu@tclserver- ssl]$ ./certbot-auto renew
Requesting root privileges to run certbot...
/home/yi_liu/.local/share/letsencrypt/bin/letsencrypt renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log
-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/eapa.test.com.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal
The following certs are not due for renewal yet:
/etc/letsencrypt/live/eapa.test.com/fullchain.pem (skipped)
No renewals were attempted.
效果如下圖:
參考文檔: