免費(fèi)申請通配符類型SSL證書

折騰起因

最近做了個(gè)小網(wǎng)站wawoo.fun,一個(gè)做mac壁紙的小網(wǎng)站,網(wǎng)站還處在初級(jí)階段,不能跟大神的比。網(wǎng)站發(fā)布后發(fā)現(xiàn)因?yàn)闆]有使用https,谷歌瀏覽器會(huì)在地址欄提示網(wǎng)站不安全。因此想提升下網(wǎng)站的逼格,把網(wǎng)站由http升級(jí)為https。

阿里云免費(fèi)證書只支持單域名

我買的是阿里云的服務(wù)器,因此想到之前看到阿里云有送免費(fèi)的https證書,遂打開阿里云證書申請頁面,發(fā)現(xiàn)贈(zèng)送的免費(fèi)證書只支持單域名的。我的站點(diǎn)至少需要一個(gè)支持wawoo.fun和www.wawoo.fun的證書,申請兩個(gè)單域名證書,然后再在nginx中分別配置,這個(gè)太low了,不是我想要的,通配符證書才是我想要的,但是阿里云的通配符證書太貴了,不是我這個(gè)小站長消費(fèi)的起的,于是放棄阿里云的證書,尋找其他方案。

Let's Encrypt提供免費(fèi)通配符證書

經(jīng)過搜索發(fā)現(xiàn),真的有提供免費(fèi)通配符類型證書的機(jī)構(gòu),那就是Let's Encrypt,Let's Encrypt已為1.8億個(gè)網(wǎng)站提供了HTTPS證書,它是一個(gè)非盈利性證書頒發(fā)機(jī)構(gòu),其頒發(fā)的證書受所有主流瀏覽器廠商的信任,安全可靠。

Let's Encrypt證書申請客戶端選擇

申請Let's Encrypt的免費(fèi)證書,需要使用Let's Encrypt的證書申請客戶端,官方推薦的是certbot,是腳本類型的,其他的證書申請客戶端還有很多。遂搜索了一下大家常用的證書申請客戶端,比較常用的是acme.sh,和certbot一樣是腳本類型的,試用了一下,確實(shí)很強(qiáng)大,在配置了阿里云的域名解析API接口授權(quán)參數(shù)后,可以自動(dòng)更新證書,更新后自動(dòng)重啟nginx,超級(jí)方便。

遇到問題:證書自動(dòng)更新后無法自動(dòng)多節(jié)點(diǎn)部署

在準(zhǔn)備使用acme.sh后,突然發(fā)現(xiàn)一個(gè)問題,就是如果我以后要擴(kuò)充nginx容器的數(shù)量,證書自動(dòng)更新就有問題了,多個(gè)容器內(nèi)acme.sh會(huì)各自更新各自的,就會(huì)生成多個(gè)不一樣的證書,而且一旦我的容器個(gè)數(shù)超過5個(gè),同時(shí)更新會(huì)觸法Let's Encrypt的證書更新請求速率限制,導(dǎo)致5個(gè)之外的所有容器都會(huì)更新失敗,這個(gè)不利于以后容器的擴(kuò)展。而且如果我需要在阿里云的CDN中部署證書,還要在每次證書更新后手動(dòng)將證書上傳到阿里云的CDN中,很不便捷。

找到答案:OHTTPS可在證書更新后自動(dòng)部署至多節(jié)點(diǎn)

為了解決上面的問題,并充分發(fā)揚(yáng)我懶的本質(zhì),我又開始了我的搜索之旅,經(jīng)過了持久的搜索后,發(fā)現(xiàn)了這個(gè)寶藏站點(diǎn)ohttps.com,這個(gè)網(wǎng)站提供了我想要的所有功能。OHTTPS提供了證書的申請、吊銷、到期前通知、自動(dòng)更新、更新后自動(dòng)部署,并可自動(dòng)部署至阿里云或騰訊云的負(fù)載均衡、CDN或證書列表中,還可以部署至Nginx容器中,并支持多節(jié)點(diǎn)自動(dòng)部署。哇,真是太棒了,這個(gè)正是我想要的功能啊,更棒的是提供了免DNS授權(quán)模式,也就是不需要提供阿里云域名解析API的accessKey和accessKeySecret就可以實(shí)現(xiàn)自動(dòng)更新。

使用OHTTPS創(chuàng)建證書

首先需要注冊一個(gè)OHTTPS的賬號(hào),注冊成功之后登錄進(jìn)去打開證書管理頁面,點(diǎn)擊創(chuàng)建證書,然后進(jìn)入創(chuàng)建證書步驟:

  • 1、選擇證書類型,這里我們選擇泛域名證書,也就是通配符證書,然后輸入我們的域名


    image
  • 2、選則驗(yàn)證域名所有權(quán)方式,這里我們選擇免DNS授權(quán)模式,然后它會(huì)提示需要添加1條CNAME類型的記錄至DNS域名解析記錄中,我們按照它的提示將記錄添加至wawoo.fun的域名解析記錄中
image
  • 3、點(diǎn)擊創(chuàng)建證書,證書申請開始了


    image
  • 4、1 ~ 2分鐘之后證書申請成功,可以點(diǎn)擊查看證書內(nèi)容


    image
  • 5、點(diǎn)擊管理證書后,會(huì)在證書管理頁面中看到我們申請的證書


    image

在OHTTPS中創(chuàng)建證書Nginx容器部署節(jié)點(diǎn)

要使OHTTPS在證書自動(dòng)更新后自動(dòng)部署到Nginx容器中,我們需要先創(chuàng)建部署節(jié)點(diǎn)。選擇部署節(jié)點(diǎn)菜單,點(diǎn)擊添加節(jié)點(diǎn),然后我們選擇Docker - Nginx,點(diǎn)擊生成令牌,這個(gè)令牌是在使用容器時(shí)會(huì)使用到的,下面我會(huì)使用到。


image

在OHTTPS中配置證書自動(dòng)更新、自動(dòng)部署

在證書管理頁面中,選擇我們剛才創(chuàng)建的證書,點(diǎn)擊配置,在這里我們可以對證書進(jìn)行配置:到期前是否進(jìn)行通知、是否自動(dòng)更新、更新后是否自動(dòng)部署、部署至那些節(jié)點(diǎn)等。我們?nèi)窟x擇自動(dòng),然后將我們剛才創(chuàng)建的部署節(jié)點(diǎn)添加進(jìn)來。

image

構(gòu)建我們自己的nginx容器鏡像

在OHTTPS中證書配置完成后,我們需要構(gòu)建自己的nginx容器鏡像。這里需要用到OHTTPS官方提供的ohttps/ohttps-nginx容器鏡像作為基礎(chǔ)鏡像,這個(gè)鏡像也是基于nginx官方鏡像構(gòu)建的,添加了證書更新功能,證書從服務(wù)器拉取過來之后,會(huì)存在容器內(nèi)部的/etc/nginx/certificates文件夾下,證書文件具體存放位置如下:

  • 件私鑰文件cert.key:
`/etc/nginx/certificates/${證書ID}/cert.key`
  • 證書文件fullchain.cer:
`/etc/nginx/certificates/${證書ID}/fullchain.cer`

其中證書ID是我們創(chuàng)建完證書后生成的證書ID,在證書管理頁面可以看到。然后我們可以在我們自己的nginx配置文件中使用證書文件:

ssl_certificate     /etc/nginx/certificates/cert-o17xk289ev09d43l/fullchain.cer;
ssl_certificate_key /etc/nginx/certificates/cert-o17xk289ev09d43l/cert.key;

設(shè)置完nginx配置文件nginx.conf之后,我們需要編輯我們自己的Dockerfile文件,用以構(gòu)建我們自己的鏡像。在Dockerfile文件中,需要設(shè)定兩個(gè)環(huán)境變量:

  • PUSH_NODE_ID:就是我們創(chuàng)建的部署節(jié)點(diǎn)的ID,在部署節(jié)點(diǎn)管理頁面可以看到
  • PUSH_NODE_TOKEN:就是我們創(chuàng)建部署節(jié)點(diǎn)時(shí)點(diǎn)擊生成的32位的Token

下面是Dockerfile文件:

FROM ohttps/ohttps-nginx:1.0.1
WORKDIR /etc/nginx
COPY ./nginx.conf /etc/nginx/nginx.conf
ENV PUSH_NODE_ID='push-k7l13g8j30xm9qp4'
ENV PUSH_NODE_TOKEN='0bfff9fc3024453819c4f107a397ca86'

Dockerfile文件編輯完成之后,就可以生成鏡像,然后我們就可以使用我們自己的鏡像啟動(dòng)我們自己的nginx容器。這樣就實(shí)現(xiàn)了在證書到期前,自動(dòng)更新證書,并自動(dòng)將證書推送至Nginx容器中,永遠(yuǎn)都不需要再擔(dān)心證書過期了。

我寫的OHTTPS使用簡介不是很詳細(xì),具體怎么使用OHTTPS,還請看OHTTPS官方文檔快速上手OHTTPS,具體怎么使用OHTTPS的Docker - Nginx類型部署節(jié)點(diǎn),也請看OHTTPS官方文檔部署節(jié)點(diǎn) - Docker - Nginx。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容