Let's Encrypt是國外一個公共的免費SSL項目,由 Linux 基金會託管。html
它的來頭不小,由Mozilla、思科、Akamai、IdenTrust和EFF等組織發起,目的就是向網站自動簽發和管理免費證書,以便加速互聯網由HTTP過渡到HTTPS,目前Facebook等大公司開始加入贊助行列。python
Let's Encrypt已經得了 IdenTrust 的交叉簽名,這意味着其證書如今已經能夠被Mozilla、Google、Microsoft和Apple等主流的瀏覽器所信任,你只須要在Web 服務器證書鏈中配置交叉簽名,瀏覽器客戶端會自動處理好其它的一切,Let's Encrypt安裝簡單,目前看來推廣的很順利,確實幫助全球互聯網快速進入HTTPS時代了。nginx
這裏介紹一下使用NGINX如何配置使用Let's Encrypt的證書。c++
#yum -y install gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel #cd /usr/local #wget http://nginx.org/download/nginx-1.13.0.tar.gz #tar –zxvf nginx-1.13.0.tar.gz
進入nginx 文件夾目錄執行如下命令:git
./configure --prefix=/usr/local/nginx1.13 --with-http_stub_status_module --with-http_ssl_module
加了兩項編譯參數,給nginx加上http_stub_status_module模塊和http_ssl_module模塊。
若是沒有配置ssl模塊,開啓SSL參數後nginx會提示錯誤:nginx: [emerg] the 「ssl」 parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf)。github
配置後輸入如下命令:web
make && make install
一、切換到源碼包:apache
#cd /usr/local/src/nginx-1.13.0
二、查看nginx原有的模塊:centos
#/usr/local/nginx/sbin/nginx -V
在configure arguments:後面顯示的原有的configure參數以下:python3.x
--prefix=/usr/local/nginx --with-http_stub_status_module
那麼咱們的新配置信息就應該這樣寫:
#./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_modul
運行上面的命令便可,等配置完。
配置完成後,運行命令:
#make
這裏不要進行make install,不然就是覆蓋安裝。
而後備份原有已安裝好的nginx。
#cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
而後將剛剛編譯好的nginx覆蓋掉原有的nginx(這個時候nginx要中止狀態)。
#service nginx stop #cp ./objs/nginx /usr/local/nginx/sbin/
而後啓動nginx,仍能夠經過命令查看是否已經加入成功
#service nginx start #/usr/local/nginx/sbin/nginx -V
Let’s Encrypt官網推薦你們使用Certbot來安裝。
一、保證你申請SSL的域名和服務器的IP是一致的,即域名確實是解析到你的服務器上的,可使用nslookup命令查詢。
#nslookup www.yourwebsite.com
Let’s Encrypt在給你分配證書時,會檢查你所在的服務器是否和域名解析的服務器一致。
二、安裝Git 和bc ,並從github上將代碼克隆到本地
#yum –y git bc #git clone https://github.com/certbot/certbot /opt/certbot-master
三、安裝環境支持
由於certbot對Debian系統支持最好,能夠完成自動檢測並安裝相應的軟件。若是你是使用其它的Linux系統,Redhat或CentOS 6可能須要配置EPEL軟件源,Python須要2.7版本以上,若是發現運行第4步出錯,可能就是沒有安裝支持環境,能夠回來這裏安裝
# CentOS 6 yum install centos-release-SCL && yum update yum install python27 scl enable python27 bash yum install python27-python-devel python27-python-setuptools python27-python-tools python27-python-virtualenv yum install augeas-libs dialog gcc libffi-devel openssl-devel python-devel yum install python-argparse # CentOS 7 yum install -y git python27 yum install -y augeas-libs dialog gcc libffi-devel openssl-devel python-devel yum install python-argparse
四、安裝開始,須要停掉nginx,由於須要用到80端口鏈接驗證
#service nginx stop #/opt/certbot-master/letsencrypt-auto --help
或者用指定域名和郵箱進行安裝,免得設置。
#/opt/certbot-master/letsencrypt-auto certonly --standalone -email 郵箱地址(郵箱地址是用來接收緊急通知和找回密鑰的) -d 域名
執行上述命令後,會彈出對話框,贊成用戶協議,而後按文字提示操做下去就好了,支持多域名,只須要在用空格或者英文逗號分隔就行了。若是使用國內 VPS,此處可能會因爲 DNS 問題出錯,能夠嘗試更換 VPS 的 DNS 爲第三方,好比 8.8.8.8。
運行完成以後,你會看到下面這個提示:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/bnxb.com/fullchain.pem. Your cert will
expire on 2017-08-16. To obtain a new version of the certificate in
the future, simply run Let's Encrypt again.
- Your account credentials have been saved in your Let's Encrypt
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Let's
Encrypt so making regular backups of this folder is ideal.
- If you like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
命令完成後,最新版本的證書位置:/etc/letsencrypt/live/域名/
每一個域名一個目錄,有如下文件:
nginx 中用到的是fullchain.pem 和 privkey.pem 其餘爲apache使用的證書。
五、啓用更安全的加密方式
默認是 SHA-1 形式,而如今主流的方案應該都避免 SHA-1,爲了確保更強的安全性,咱們能夠採起迪菲-赫爾曼密鑰交換。
#yum install openssl #yum install openssl-devel #openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
完整配置:
server { #nginx 監聽端口,443爲默認https端口,ssl指使用https listen 80 default backlog=2048; listen 443 ssl; # 服務器名稱 server_name bnxb.com; # https證書公鑰 ssl_certificate /etc/letsencrypt/live/bnxb.com/fullchain.pem; # https證書私鑰 要注意保存! ssl_certificate_key /etc/letsencrypt/live/域名/privkey.pem; # 支持的加密協議 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; #nginx默認會使用Diffiel-Hellman交換密鑰是1024位的,相對不安全,因此須要替換使用更安全的 ssl_dhparam /etc/ssl/certs/dhparam.pem; # 支持的加密套件 ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; # 定義session過時時間 ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_stapling on; ssl_stapling_verify on; # 若是是全站 HTTPS 而且不考慮 HTTP 的話能夠爲響應頭添加要求瀏覽器使用https重定向的 header add_header Strict-Transport-Security max-age=15768000; # 禁止外部站點iframe add_header X-Frame-Options DENY; # The rest of your server block root /path/to/root; index index.html index.htm; location / { try_files $uri $uri/ =404; } }
還能夠再增長配置80端口跳轉到HTTPS:
location / { return 301 https://$server_name$request_uri; }
經過此網址查詢你的SSL狀態:https://www.ssllabs.com/ssltest/analyze.html?d=域名
Let's Encrypt證書只有90天有效期,過時前須要續期。
#./letsencrypt-auto renew --force-renewal
#!/bin/sh # This script renews all the Let's Encrypt certificates with a validity < 30 days if ! /opt/letsencrypt/letsencrypt-auto renew > /var/log/letsencrypt/renew.log 2>&1 ; then echo Automated renewal failed: cat /var/log/letsencrypt/renew.log exit 1 fi nginx -t && nginx -s reload
#crontab -e 編輯任務內容 @daily /path/to/renewCerts.sh
完畢。