使用Let‘s Encrypt的SSL證書配置HTTPS手記

前段時(shí)間鳞骤,看見很多大會(huì)都在分享全站HTTPS的經(jīng)驗(yàn)窒百。HTTPS固然好,前提是SSL證書豫尽,并且簽發(fā)證書的機(jī)構(gòu)要靠譜篙梢。沃通的CA證書就相繼被Mozilla和Google封殺了。曾經(jīng)對(duì)于普通用戶美旧,權(quán)威渤滞,安全,并且免費(fèi)的證書無疑就像天上的星星榴嗅,可望而不可及⊥唬現(xiàn)在,這些星星變成了餡餅掉了下來嗽测。沒錯(cuò)绪励,我們可以申請(qǐng)安全免費(fèi)的ssl證書--- Let‘s Encrypt。

Let’s Encrypt是電子前哨基金會(huì)(EFF)發(fā)布的免費(fèi) SSL 證書服務(wù)唠粥,Google疏魏,Mozilla和Microsoft都極力支持。很早之前就聽說了let’s encrypt厅贪,當(dāng)時(shí)礙于其證書有效期短蠢护,并且配置麻煩,遂懶得折騰养涮。最近發(fā)現(xiàn)他們的網(wǎng)站發(fā)布了工具和一系列自動(dòng)化的工作流配置葵硕。嘗試了一下眉抬,還蠻不錯(cuò)。

安裝 Cerbot

Certbot專門用來部署Let‘s encrypt的工具懈凹,其官網(wǎng)會(huì)根據(jù)使用的web服務(wù)器軟件和操作系統(tǒng)平臺(tái)蜀变,提供響應(yīng)的安裝工具和安裝方法。

我這里選擇了NginxUbuntu16.10的組合介评。會(huì)看到網(wǎng)站跳轉(zhuǎn)到一個(gè)簡(jiǎn)易的使用文檔库北。使用下面的命令安裝即可:

WechatIMG2.jpeg
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot 

對(duì)于Ubuntu14以上的版本,可能并沒有add-apt-repository们陆。需要安裝下面的軟件包:

$ sudo apt-get install python-software-properties
$ sudo apt-get install software-properties-common 

Cerbot是EFF為了避免以前使用letsencyrpt配置繁瑣而開發(fā)的工具寒瓦。因操作系統(tǒng)不一樣,安裝的軟件包也不一樣坪仇,例如centos安裝的是cerbot-auto杂腰,以前的ubuntu安裝的則是letsencyrpt。具體用那個(gè)椅文,直接通過上面的組合喂很,根據(jù)文檔提示即可。

配置

別擔(dān)心皆刺,Cerbot就是為了減少配置而生的少辣。這里的配置即創(chuàng)建一個(gè)目錄,配置域名訪問服務(wù)器即可羡蛾。首先創(chuàng)建一個(gè)文件夾漓帅,用于letsencrypt的目錄。

$ sudo mkdir -p /etc/letsencrypt

然后編輯nginx林说,啟動(dòng)一個(gè)基本的web服務(wù)煎殷。假設(shè)你的網(wǎng)站根目錄再/var/www下。nginx配置大致如下

server {
        listen 80 default_server;
      
        root /var/www;

        index index.html index.htm index.nginx-debian.html;
        
        server_name www.example.com;

        location / {
               
                try_files $uri $uri/ =404;
        }

}

配置完畢nginx腿箩,確保能訪問 http://www.example.com豪直。配置域名和http服務(wù)器的主要作用在于讓letsencrypt校驗(yàn)?zāi)闶窃撚蛎乃姓摺R驗(yàn)榈认抡{(diào)用Certbot命令的時(shí)候珠移,會(huì)在www目錄下創(chuàng)建一個(gè)隱藏的.well-known/acme-challenge的文件弓乙,然后letsencrypt訪問http://www.example.com/.well-known/acme-challenge。如果無法訪問钧惧,那么letsencrypt會(huì)認(rèn)為該域名不是你的暇韧,自然就無法為你簽發(fā)證書了。

生成證書

又是安裝浓瞪,又是配置服務(wù)器懈玻。目前為止還不算復(fù)雜。當(dāng)然乾颁,下面也不會(huì)復(fù)雜涂乌,有了上面的準(zhǔn)備艺栈,生成證書只需要一條命令。

$ sudo certbot certonly --webroot -w /var/www -d www.example.com 

運(yùn)行命令之后湾盒,會(huì)有一些選擇湿右,Yes或者No,有一步需要提供一個(gè)郵箱罚勾,用于證書快過期的時(shí)候收到letsencrypt的提示毅人。

上面的命令中,certonly是子命令尖殃,webroot是一個(gè)插件丈莺。w參數(shù)表示網(wǎng)站的根目錄,即certbot創(chuàng)建.well-know的地方分衫,d參數(shù)表示簽發(fā)的域名场刑。可以一次指定多個(gè) w 網(wǎng)站d 域名的配對(duì)蚪战。

對(duì)于其他系統(tǒng),有可能不是這個(gè)certbot命令铐懊,可能是certbot-auto或者letsencrypt

簽發(fā)成功之后邀桑,就會(huì)在/etc/letsencrypt下生成如下的文件:

$ ls
accounts  archive  csr  keys  live  post-hook.d  pre-hook.d  renew-hook.d  renewal

其中archive文件夾存放多個(gè)歸檔的證書,keys是所有的證書科乎。這些都是跟重簽證書和續(xù)有效期有關(guān)的壁畸。使用certbot的工具,我們可以忽略這些目錄茅茂。當(dāng)前使用的證書存放在live文件下捏萍。

/etc/letsencrypt/live/www.example.com 目錄下有README cert.pem chain.pem fullchain.pem privkey.pem這幾個(gè)文件,

  • privkey.pem 這是私匙空闲,對(duì)應(yīng)Nginx的ssl_certificate_key選項(xiàng)令杈。
  • cert.pem 服務(wù)器證書,對(duì)應(yīng)SSLCertificateFile選項(xiàng)碴倾。
  • chain.pem 除服務(wù)器證書之外的所有證書逗噩,Nginx對(duì)應(yīng)ssl_trusted_certificate選項(xiàng)。
  • fullchain.pem 包括上面的服務(wù)器證書和其他證書跌榔,Nginx對(duì)應(yīng)ssl_certificate選項(xiàng)异雁。

實(shí)際上live目錄的存放的證書文件都是對(duì)archive的連接。我們只要指定該目錄的文件僧须,當(dāng)證書更下的時(shí)候纲刀,會(huì)自動(dòng)修改連接。

配置HTTPS

我們已經(jīng)生成了SSL證書担平,下面就是應(yīng)用到我們的服務(wù)器了示绊。對(duì)于配置nginx的https锭部,有mozilla的一個(gè)網(wǎng)站提供了最佳實(shí)踐。我們只需要選擇nginx和openssl的版本耻台,就會(huì)自動(dòng)生成一個(gè)基礎(chǔ)配置給我們空免,非常方便

WechatIMG3.jpeg

對(duì)于上面的配置,大致如下:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    # certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
    ssl_certificate /path/to/signed_cert_plus_intermediates;
    ssl_certificate_key /path/to/private_key;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;

    # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
    ssl_dhparam /path/to/dhparam.pem;

    # intermediate configuration. tweak to your needs.
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
    ssl_prefer_server_ciphers on;

    # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
    add_header Strict-Transport-Security max-age=15768000;

    # OCSP Stapling ---
    # fetch OCSP records from URL in ssl_certificate and cache them
    ssl_stapling on;
    ssl_stapling_verify on;

    ## verify chain of trust of OCSP response using Root CA and Intermediate certs
    ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

    ....
}

listen 443 ssl http2;表示監(jiān)聽443端口盆耽,并開啟http2蹋砚,當(dāng)然也可以不開啟。

ssl_certificate配置fullchain.pem的路徑摄杂; ssl_certificate_key配置privkey.pem的路徑坝咐。

ssl_dhparam的配置/etc/nginx/ssl。如果不存在這個(gè)文件析恢,就自己創(chuàng)建墨坚。創(chuàng)建的命令如下:

$ sudo mkdir /etc/nginx/ssl
$ sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

生成ssl_dhparam.pem文件大概需要一分鐘。ssl_trusted_certificate的配置是可選的映挂,并且nginx文檔也提到ssl_certificate 如果已經(jīng)包含了intermediates泽篮,所以我們就配置這個(gè)。

resolver的作用是配置解析OCSP服務(wù)器的域名柑船,通常會(huì)寫VPS云服務(wù)商提供的DNS服務(wù)器帽撑。這里我們也忽略。

配置完畢之后鞍时,重啟nginx亏拉,此時(shí)再訪問你的域名www.example.com就能看見https的協(xié)議,瀏覽器加上了一把綠色的小鎖逆巍。

檢測(cè)SSL的安全性

配置成功HTTPS之后及塘,為了驗(yàn)證我們的成果,可以通過Qualys SSL Labs網(wǎng)站檢測(cè)锐极。不出意外笙僚,你將得到一個(gè)A+。如果還沒有溪烤,則仔細(xì)看看還差什么方面的修補(bǔ)啦味咳。

如果開啟了nginx的HTTP2配置,也會(huì)看見瀏覽器訪問的開發(fā)者工具中檬嘀,顯示的h2的協(xié)議槽驶。當(dāng)然,nginx開啟http需要版本在1.9.5之上鸳兽,編譯還需要設(shè)置--with-http_v2_module掂铐。對(duì)于1.10.1以上的版本,則默認(rèn)安裝的就能開啟http2的功能。

更新證書

letsencrypt的證書權(quán)威且安全全陨,就是有效期只有90天爆班。過期前需要續(xù)時(shí)間。好在certbot提供的工具足夠簡(jiǎn)單辱姨。

運(yùn)行命令sudo certbot renew即可續(xù)時(shí)間柿菩,如果還沒到過期時(shí)間,運(yùn)行命令也不會(huì)有大礙雨涛。當(dāng)然你可以使用命令測(cè)試sudo certbot renew --dry-run枢舶。續(xù)的時(shí)候certbot也會(huì)根據(jù)上面配置域名的時(shí)候,校驗(yàn)服務(wù)器上.well-know替久。確保你的服務(wù)器依然可以訪問這個(gè)文件凉泄,不然會(huì)認(rèn)證失敗。

成功續(xù)了時(shí)間之后蚯根,還需要重啟服務(wù)器后众。因此需要自己寫一個(gè)腳本或者cron。定期更新證書的有效期并且重啟nginx服務(wù)颅拦。

總結(jié)

Let‘s Encrypt項(xiàng)目剛開始的時(shí)候蒂誉,使用確實(shí)很麻煩。有好心人做了第三方配置腳本距帅,可是對(duì)不同系統(tǒng)的兼容性比較差拗盒。不知道是不是用戶反饋還是EFF看不下去了,才開發(fā)了Certbot锥债。Certbot確實(shí)是神器,化繁為簡(jiǎn)痊臭。由此可見哮肚,很多時(shí)候,我們可以通過技術(shù)創(chuàng)造去提供更好的服務(wù)广匙。使用HTTPS允趟,開啟HTTP2.0。讓letsencrypt為你的網(wǎng)站保駕護(hù)航鸦致。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末潮剪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子分唾,更是在濱河造成了極大的恐慌抗碰,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绽乔,死亡現(xiàn)場(chǎng)離奇詭異弧蝇,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門看疗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沙峻,“玉大人,你說我怎么就攤上這事两芳∷ふ” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵怖辆,是天一觀的道長是复。 經(jīng)常有香客問我,道長疗隶,這世上最難降的妖魔是什么佑笋? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮斑鼻,結(jié)果婚禮上蒋纬,老公的妹妹穿的比我還像新娘。我一直安慰自己坚弱,他們只是感情好蜀备,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著荒叶,像睡著了一般碾阁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上些楣,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天脂凶,我揣著相機(jī)與錄音,去河邊找鬼愁茁。 笑死蚕钦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鹅很。 我是一名探鬼主播嘶居,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼促煮!你這毒婦竟也來了邮屁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤菠齿,失蹤者是張志新(化名)和其女友劉穎佑吝,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泞当,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迹蛤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年民珍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盗飒。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嚷量,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出逆趣,到底是詐尸還是另有隱情蝶溶,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布宣渗,位于F島的核電站抖所,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏痕囱。R本人自食惡果不足惜田轧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鞍恢。 院中可真熱鬧傻粘,春花似錦、人聲如沸帮掉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蟆炊。三九已至稽莉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涩搓,已是汗流浹背污秆。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昧甘,地道東北人混狠。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像疾层,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贡避,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容