使用acme腳本申請免費ssl證書並自動續簽

隨著支持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。 如果這是一個商業網站,當用戶看到瀏覽器中的那把小鎖,帶來的感受遠不僅僅是安全這麽簡單。