如何爲網站配置(Let’s Encrypt)HTTPS協議
之前寫過另外一篇文章《Windows下安裝Xampp並配置SSL》,有興趣可以看下。一直糾結我這個博客要不要上HTTPS協議,發現好多站都是用的Let’s Encrypt SSL證書,我也好奇,今天手賤配置了SSL。這個證書有效期90天,不過可以用腳本自動續期。
Let's Encrypt是國外一個公共的免費SSL項目,由 Linux 基金會託管,它的來頭不小,由Mozilla、思科、Akamai、IdenTrust和EFF等組織發起,目的就是向網站自動簽發和管理免費證書,以便加速互聯網由HTTP過渡到HTTPS,目前Facebook等大公司開始加入贊助行列。Let's Encrypt已經得了 IdenTrust 的交叉簽名,這意味着其證書現在已經可以被Mozilla、Google、Microsoft和Apple等主流的瀏覽器所信任,你只需要在Web 服務器證書鏈中配置交叉簽名,瀏覽器客戶端會自動處理好其它的一切,Let's Encrypt安裝簡單,未來大規模採用可能性非常大。
下面給大家說說怎麼配置:
先說下網站環境
System environment: Centos 7
Nginx version: nginx/1.4.7
本人懶省事,用的阿里雲一鍵安裝包sh-1.5.5
下面進入正題
1、配置nginx支持https協議訪問,需要在編譯安裝nginx的時候添加相應的模塊–with-http_ssl_module和–with-http_gzip_static_module,命令查看是否有相應模塊,沒有需要重新編譯,默認一鍵安裝包都帶了。
nginx -V
2、防火牆開啓https協議默認端口443
# vi /etc/sysconfig/iptables #編輯防火牆配置文件,添加以下代碼 -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT :wq! #保存退出 service iptables restart(/bin/systemctl restart iptables.service) #重啓防火牆
3、利用腳本快速獲取Let’s Encrypt SSL證書
# mkdir /alidata/server/nginx/certs/ //創建certs目錄 # cd /alidata/server/nginx/certs/ //進入certs目錄 下載腳本文件 wget https://raw.githubusercontent.com/xdtianyu/scripts/master/lets-encrypt/letsencrypt.conf wget https://raw.githubusercontent.com/xdtianyu/scripts/master/lets-encrypt/letsencrypt.sh 給予腳本755權限 chmod +x letsencrypt.sh
4、配置letsencrypt.conf文件
vi letsencrypt.conf # only modify the values, key files will be generated automaticly. ACCOUNT_KEY="letsencrypt-account.key" DOMAIN_KEY="lirongyao.com.key" DOMAIN_DIR="/alidata/www/site" DOMAINS="DNS:lirongyao.com" #ECC=TRUE #LIGHTTPD=TRUE :wq! 保存
5、執行腳本生成需要的key文件
# ./letsencrypt.sh letsencrypt.conf Generate account key... Generating RSA private key, 4096 bit long modulus ................++ .......................................................................................................................................................................................................................................................................................................++ e is 65537 (0x10001) Generate domain key... Generating RSA private key, 2048 bit long modulus ................................................................+++ .......................+++ e is 65537 (0x10001) Generate CSR...lirongyao.csr Parsing account key... Parsing CSR... Registering account... Registered! Verifying lirongyao.com... lirongyao.com verified! Signing certificate... Certificate signed! New cert: lirongyao.chained.crt has been generated //看到這個說明獲取證書成功
如果出現如下錯誤信息:
錯誤1
Traceback (most recent call last):
File “/tmp/acme_tiny.py“, line 2, in <module>
import argparse, subprocess, json, os, sys, base64, binascii, time, hashlib, re, copy, textwrap, logging ImportError:
No module named argparse
執行以下命令:
yum install python-argparse
錯誤2
Traceback (most recent call last):
File “setup.py“, line 3, in <module>
from setuptools import setup, find_packages ImportError: No module named setuptools
安裝setuptools
wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz tar zxvf setuptools-0.6c11.tar.gz cd setuptools-0.6c11 python setup.py build python setup.py install
錯誤3
ValueError: Wrote file to /alidata/www/boke/.well-known/acme-challenge/23YlOKT25QPM0NtJL-tHkWOxEXja_aVUTAqKXwlp66g, but couldn’t download http://lirongyao.com/.well-known/acme-challenge/23YlOKT25QPM0NtJL-tHkWOxEXja_aVUTAqKXwlp66g
原因是國內DNS解析問題,還有沒有目錄沒有權限寫入等提示
完成後會生成以下幾個文件
lets-encrypt-x3-cross-signed.pem letsencrypt-account.key lirongyao.chained.crt lirongyao.com.key lirongyao.crt lirongyao.csr
6、打開網站配置文件,修改和添加紅色部分
# vi /alidata/server/nginx/conf/vhosts/rongyao.conf server { listen 443; ssl on; ssl_certificate /alidata/server/nginx/certs/lirongyao.chained.crt; ssl_certificate_key /alidata/server/nginx/certs/lirongyao.com.key; server_name lirongyao.com; index index.html index.htm index.php; root /alidata/www/site; ...省略部分... } server { listen 80; rewrite ^(.*) https://lirongyao.com$1 permanent; //強制80轉向443 } :wq! 保存 #service nginx restart 重啓NGINX服務
至此HTTPS協議配置完成。
7、每月1號定時自動續期,因爲這個證書只有90天有效期。
0 0 1 * * /alidata/server/nginx/certs/letsencrypt.sh /alidata/server/nginx/certs/letsencrypt.conf >> /alidata/log/lets-encrypt.log 2>&1
如何配置定時任務參考這篇文章《Linux定時重啓系統或服務》