隨著支持https的網站越來越多,一些還沒有支持https的網站也加入了擁抱https的步伐。免費的ssl證書的「登場」也加速了普及的進度。 對於公開對外服務的各類網站而言,做到一年、甚至幾個月手動更新一次ssl證書並不是難事,但非正式服務或者僅對內部開放的服務來說,可能相應管理員就不情願做這個了。這時候,就要用到腳本化方式自動更新了。 這介紹的是使用 acme 腳本申請 letsencrypt 證書並自動更新的方法,項目地址在這:https://github.com/Neilpang/acme.sh
1.安裝
登錄伺服器,執行一條命令。
curl https://get.acme.sh | bash
2.申請證書 使用該腳本申請證書的驗證方式有兩種,一種是網站文件驗證,一種是DNS驗證,由於在正式的生產環境中是不可能的隨隨便便就能改動網站內容的,於是選擇DNS驗證。 在執行申請證書命令之前,需要先登錄域名註冊商的管理面板獲取APIKey以後才能繼續,該腳本支持主流的DNS服務商。例如 cloudflare、dnspod、cloudxns、godaddy 等。詳細方法可參閱:https://github.com/Neilpang/acme.sh/wiki/dnsapi 以cloudflare為例,獲取APIKey後,在服務器終端中執行以下命令。
export CF_Key="獲取的key"
export CF_Email="登錄面板用的電子郵件地址"
然後申請證書(將youdomainname替換為所需域名,可泛匹配):
acme.sh --issue --dns dns_cf -d youdomainname -d *.youdomainname.com
若位於docker容器內,命令行請使用 .acme.sh/acme.sh 替換掉 acme.sh 申請證書成功後,那麽就需要安裝證書了,已經生成的證書位於當前登錄服務器用戶的home目錄下的 .acme.sh文件夾中,不過這裏的文件並不能直接使用,需要用到專門的命令來安裝。
正確的使用方法是使用 –installcert 命令,並指定目標位置, 然後證書文件會被copy到相應的位置。命令中所在的路徑必須為當前登錄用戶可讀寫的,不過秘鑰文件是否已經存在則無要求。
acme.sh --installcert -d 已經申請證書的域名 \
--key-file 所需要的路徑/server.key \
--fullchain-file 所需要的路徑/fullchain.cer \
--reloadcmd "service nginx force-reload"
指定的所有參數都會被自動記錄下來, 並在將來證書自動更新以後, 被再次自動調用。
如果是初次設置網站https,那麽也需要修改web服務器的配置文件。在本文中也貼出一份nginx的配置文件供各位參考。(如需復製使用,請刪除註釋)
server {
listen 80 default; #80端口監聽(可單獨設置在一個http選項中)
listen 443 ssl http2; #443端口ipv4監聽
listen [::]:443 ssl http2; #443端口ipv6監聽
server_name example.com; #域名1
server_name www.example.com; #域名2
root /var/www/website1; #網站根目錄
index index.html index.php index.htm;
client_max_body_size 10240M;
ssl_certificate "/etc/nginx/ssl/server.crt"; #證書位置
ssl_certificate_key "/etc/nginx/ssl/server.key"; #秘鑰位置
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
include /etc/nginx/default.d/*.conf;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000; #php-fpm-sock鏈接方式
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include fastcgi_params;
}
}
3.續簽證書 續簽證書將由腳本使用crontab定時任務自動完成,用戶無須擔心。不過服務器環境是在docker容器內的話,則需要註意是否安裝了crontab服務,以及是否啟動以及支持自動啟動。
安裝crontab服務:
ubuntu/debian:
apt-get install cron
redhat/centos:
yum install -y cron
在確定好crontab有效之後,再打開acme自身的自動更新,一個ssl免維護環境就搞定了。
4.關於https的個人看法
使用https可以有效減少多種 內容從瀏覽器傳輸到服務器過程中的 安全隱患。 使用https以及配合其發展的多種新技術可以讓網站速度更快。例如QUIC HTTP2。 如果這是一個商業網站,當用戶看到瀏覽器中的那把小鎖,帶來的感受遠不僅僅是安全這麽簡單。
