了解StartCom與WoSign(沃通)及母公司奇虎360的瓜葛後,對其能否在2017年1月份Mozilla FireFox 51和Google Chrome 56正式版推出之前拿出根證書被吊銷的解決方案不敢報太大希望,周末就開始嘗試獲取Let's Encrypt這家的免費SSL證書,折騰一番後也終于獲得了來自這家的第一份可用證書,現在記錄一下一些要點。
一、背景介紹:
這是一家非盈利機構,由電子前哨基金會、Mozilla基金會、密歇根大學2014年發起,屬于互聯網安全研究小組的一個項目,維基百科中的介紹:Let' s Encrypt (English), Let's Encrypt (中文)。
還有Google, Cisco, Facebook, Ford Foundation, HP等知名公司和機構贊助支持,可信度很高。
2015年開始測試發放證書,2016年正式發放證書。采用ACME協議(Automated Certificate Management Environment)。
二、獲取證書:
其官方網站上介紹是通過服務器上運行腳本來獲取的,我也是這樣嘗試成功的,不過确實還是有點麻煩。還有一個辦法,第一次獲取可以通過一個網站SSL for Free來進行,這個過程中的幫助就看得明顯一些,類似從其它收費的證書提供商那裡購買、下載的流程,建議新手試一試。
對于擁有服務器Shell權限的用戶,官方推薦使用Certbot來驗證、下載、更新證書,對于我們用CentOS 6和Apache的用戶,其推薦使用certbot-auto軟件,可以自動進行運行環境檢查升級、配置修改、域名驗證、記錄日志、下載證書、更新證書等工作,詳細介紹請看Certbot文檔。
不過我還是花了好些時間來摸索使用的,碰到的一些問題:
- 這個軟件依賴很多環境才能運行,需要安裝或升級python、open-ssl等10個以上軟件,如果服務器在國内,下載這些安裝包有可能很慢或者報錯,可以反複多運行幾次看,或者在國外服務器上安裝,另外可以創建或者修改~/.pip/pip.conf使用國内的鏡像來解決;
vim ~/.pip/pip.conf [global] index-url = http://mirrors.aliyun.com/pypi/simple/ [install] trusted-host=mirrors.aliyun.com 或 cat > ~/.pip/pip.conf <<EOF [global] index-url = https://pypi.doubanio.com/simple/ [install] trusted-host=pypi.doubanio.com EOF 或 [global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple
- 下載後修改運行權限,然後./path/to/certbot-auto 可以幫助修改apache配置,但如果不想這個軟件來修改配置,可以運行./path/to/certbot-auto certonly 隻獲取證書,然後自己來修改apache配置,命令行幫助信息:
certbot-auto [SUBCOMMAND] [options] [-d domain] [-d domain] ... Certbot can obtain and install HTTPS/TLS/SSL certificates. By default, it will attempt to use a webserver both for obtaining and installing the cert. Major SUBCOMMANDS are: (default) run Obtain & install a cert in your current webserver certonly Obtain cert, but do not install it (aka "auth") install Install a previously obtained cert in a server renew Renew previously obtained certs that are near expiry revoke Revoke a previously obtained certificate register Perform tasks related to registering with the CA rollback Rollback server configuration changes made during install config_changes Show changes made to server config during installation plugins Display information about installed plugins Choice of server plugins for obtaining and installing cert: --apache Use the Apache plugin for authentication & installation --standalone Run a standalone webserver for authentication --nginx Use the Nginx plugin for authentication & installation --webroot Place files in a server's webroot folder for authentication OR use different plugins to obtain (authenticate) the cert and then install it: --authenticator standalone --installer apache More detailed help: -h, --help [topic] print this message, or detailed help on a topic; the available topics are: all, automation, paths, security, testing, or any of the subcommands or plugins (certonly, renew, install, register, nginx, apache, standalone, webroot, etc.)
- 屏幕上出現apache、webroot、nginx、standalone、manual等幾種插件選擇的時候,
- apache:生成證書并自動修改apache相關conf配置文件;
- webroot:在本機的web目錄中創建驗證目錄和文件;
- nginx:适合nginx
- standalone:适合本機還沒有web服務的情況用一個單獨的web服務
- manual:需要另外進行域名驗證、适合網站不在本機的情況
- 我們用的一般命令:
./certbot-auto certonly --webroot -w /usr/local/apache/htdocs/example1.com/ -d ar.example1.com -d ar.m.example1.com -w /usr/local/apache/htdocs/wiki.example2.com/ -d ar.example2.com -d ar.m.example2.com
- 驗證成功後軟件會下載證書文件,放在/etc/letencrypt/live目錄下,自己再修改httpd-ssl.conf來進行配置指向這些證書文件就可以;
SSLCertificateFile "/etc/letsencrypt/live/en.18dao.net-0001/cert.pem" SSLCertificateKeyFile "/etc/letsencrypt/live/en.18dao.net-0001/privkey.pem" SSLCertificateChainFile "/etc/letsencrypt/live/en.18dao.net-0001/fullchain.pem"
- 軟件的運行日志放在/var/log/letsencrypt/letsencrypt.log中。
三、優點缺點:
優點:
- 免費,自然是最大的優點;
- 可信,基本不用擔心根證書被廢等問題;
- 便捷,隻提供域名驗證,如果熟悉的話,幾分鐘就可以搞定一張證書;
缺點:
- 目前沒有通配符域名證書,不過每張證書可以包含100個域名(可以包含多級域名、多個根域名),一般夠了,我們個别網站有超過100個子域名的情況可以做成多張證書,就是麻煩一些,目前隻支持A記錄驗證,不支持CNAME;
- 不提供個人認證、企業認證、擴展認證等,但對于我們現在多數網站來說,隻需要https實現加密以及符合搜索引擎優化需要,不進行那些認證是可以的;
- 每張證書隻有90天有效期,需要到期前續期,官方推薦設法進行配置成自動運行續期(在linux的crontab中設置每天兩次定期運行./certbot-auto renew --post-hook "service httpd restart"會自動檢查已經生成的證書,如果距離到期還早就跳過更新)。
先記錄到這裡,以後補充。
補充:Drupal多站點設置的時候,域名驗證時有報錯404或者403,需要添加一個webroot/.well-known/.htaccess,放入:
RewriteEngine On Satisfy Any
還可以在webroot/.htaccess中這樣加一句:
RewriteRule "^.well-known/acme-challenge" - [L](新加的一行) RewriteRule "(^|/)." - [F](原來的一行)
這樣就不會報錯了,這個小問題花了我好幾個小時!
2016-12-29再補充:Windows XP中,IE6, IE7, IE8都不支持SNI,一個服務器配置了多個HTTPS站點時,隻有第一個能正常訪問,另外的會報SSL證書有問題(都使用第一個虛拟主機的證書),為了兼容,可以重新生成一個包含該服務器上所有域名的總的證書放在第一個虛拟主機設置中,Lets Encrypt一張證書最多可以放置100個域名,生成新證書的時候certbot-auto提示你是否要擴展以前存在的證書,可以選中擴展,也可以放棄,然後加上--duplicate參數重新運行生成一個單獨的證書。
2017-1-19補充:打電話去問了startcom的客服,現在還沒有與mozilla達成解決辦法,而1月20日firefox将推出更新版本從而讓startssl失效,我等不及隻好全部都更換為let's encrypt證書了。把在godaddy注冊的國内網站用的域名dns改為了dnspod(cname有10個的限制,但a記錄沒有限制),國外網站用的域名dns依然用godaddy自帶的(有100項子域名的限制,又購買了premium尊享dns解析服務,才可能添加無限數量的子域名),全部重新生成證書(超過100個子域名的情況就分成多個證書,例如330個子域名就生成4個證書)。在部分域名解析從godaddy改為dnspod又改回godaddy的過程中,産生了2個多餘的ds記錄,導緻certbot-auto報錯,查了幾天才從一篇老外的問答中看到,删除這2個ds記錄後解決。
评论