引子:
最近在一篇文章中了解到EFF(電子前哨基金會)為了推廣https協議,成立了一個let'sencrypt項目,可以發放免費的證書,此證書可以被大多數主流瀏覽器所信任,這個邪惡的念頭一爆發,就讓我走上了一條坎坷的不歸路。
準備:
工具:certbot
環境:centOS7
獲取Certbot工具:
根據我在網上了解到的信息,獲取certbot工具有三種方法
第一種是通過git在github中下載
git clone https://github.com/certbot/certbot.git
第二種是通過epel-release軟件源,這個軟件源有許多yum中沒有的軟件包,包括certbot
yum install epel-release yum install certbot
第三種是通過wget來進行下載
wget https://dl.eff.org/certbot-auto
由于鐘愛github,熟悉git所以直接使用git下載好了
執行命令
git clone https://github.com/certbot/certbot.git
?
生成證書:
下載完了之后,會創建一個certbot的目錄
cd certbot
certbot-auto certonly --standalone --email crisen@crisen.org -d www.crisen.org
然后agree協議 靜靜等待生成證書即可
出現下面提示就說明安裝好了
IMPORTANT NOTES:- Congratulations! Your certificate and chain have been saved at/etc/letsencrypt/live/your.domain.com/fullchain.pem. Your certwill expire on 20XX-09-23. To obtain a new or tweaked version ofthis certificate in the future, simply run certbot again. Tonon-interactively renew *all* of your certificates, run "certbotrenew" - If you like Certbot, please consider supporting our work by:Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donateDonating to EFF: https://eff.org/donate-le
證書會生成在/etc/letsencrypt/live目錄下
部署證書:
接著把證書的公鑰和私鑰配置到nginx的ssl目錄下,創建軟鏈接
ln -s /etc/letsencrypt/live/www.crisen.org/fullchain.pem /usr/local/nginx/conf/ssl/www.crisen.org.crt
ln -s /etc/letsencrypt/live/www.crisen.org/privkey.pem /usr/local/nginx/conf/ssl/www.crisen.org.key
當然直接復制過去也是可行的
cp -i /etc/letsencrypt/live/www.crisen.org/fullchain.pem /usr/local/nginx/conf/ssl/www.crisen.org.crt cp -i /etc/letsencrypt/live/www.crisen.org/privkey.pem /usr/local/nginx/conf/ssl/www.crisen.org.key
接下來只要配置 nginx 的https服務就可以了 下面是我的nginx服務器配置文件


server {listen 80;listen 443 ssl http2;ssl_certificate /usr/local/nginx/conf/ssl/www.crisen.org.crt;ssl_certificate_key /usr/local/nginx/conf/ssl/www.crisen.org.key;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;ssl_prefer_server_ciphers on;ssl_session_timeout 10m;ssl_session_cache builtin:1000 shared:SSL:10m;ssl_buffer_size 1400;add_header Strict-Transport-Security max-age=15768000;ssl_stapling on;ssl_stapling_verify on;ssl_trusted_certificate /usr/local/nginx/conf/ssl/www.crisen.org.crt;server_name www.crisen.org;access_log /data/wwwlogs/www.crisen.org_nginx.log combined;index index.html index.htm index.php;include /usr/local/nginx/conf/rewrite/none.conf;root /data/wwwroot/profiles;if ($ssl_protocol = "") { return 301 https://$host$request_uri; } location ~ [^/]\.php(/|$) {#fastcgi_pass remote_php_ip:9000;fastcgi_pass unix:/dev/shm/php-cgi.sock;fastcgi_index index.php;include fastcgi.conf;}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {expires 30d;access_log off;}location ~ .*\.(js|css)?$ {expires 7d;access_log off;} }
效果測試:
然后進入到www.crisen.org測試一下
出現了可信任的證書 到此配置完畢
踩過的坑:
服務器操作系統版本過低:
開始的時候我的操作系統是centOS5.1版本的,內置的python只有2.4,結果沒有辦法啟動certbot出現,
因為certbot-auto是python寫的,并且必須要2.6以上的版本才可以,
網上查看了許多文檔,也確定了certbot只支持更加現代的操作系統
解決辦法:備份網站數據,升級服務器操作系統