# 使用acme腳本申請免費ssl證書並自動續簽 **Published by:** [Stever Dove](https://paragraph.com/@stever-dove/) **Published on:** 2023-06-28 **URL:** https://paragraph.com/@stever-dove/acme-ssl ## Content 隨著支持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。 如果這是一個商業網站,當用戶看到瀏覽器中的那把小鎖,帶來的感受遠不僅僅是安全這麽簡單。 ## Publication Information - [Stever Dove](https://paragraph.com/@stever-dove/): Publication homepage - [All Posts](https://paragraph.com/@stever-dove/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@stever-dove): Subscribe to updates