1. 安裝certbot
sudo apt install certbot
2. 使用certbot申請SSL憑證
手動驗證(manual)
sudo certbot certonly -d <DOMAINNAME> --manual
certonly
:表示只需要申請憑證即可。certbot還有支援一些常見的server替換SSL的功能,如apache、nginx等--manual
:表示要使用互動界面來申請憑證。
注意:使用–manual的方式申請的憑證,除非有配合使用其它驗證插件,否則無法自動renew。
這個方式申請的憑證有提供兩種預設方式驗證
- 會產生一個challenge檔案,然後讓我們放到要使用這個憑證的機器(至少是這個domain name會連到的機器)的根目錄下指定的資料夾,讓ACME驗證可以使用申請的domain name加上給定的ACME資料夾,拿到申請的檔案。
- 直接會在目標機器上加上一個短暫的server,做到在指定的網址回傳上述的challenge檔案。
另外certbot其實還提供了其它的驗證方式,例如DNS
sudo certbot certonly -d <DOMAINNAME> --preferred-challenges dns --manual
- certbot會在申請的互動界面,產生一個申請憑證網域的challenge key和value,申請人要到DNS託管服務,例如GoDaddy、AWS Route53等服務上,對要申請憑證的網域使用certbot產出的key value來建立一筆TXT設定,讓Let’s Encrypt確定要申請的網域是屬於你的。
使用Route53插件驗證
其實就是藉由Route53的API,讓插件替我們做完把ACME Chellenge TXT設定到DNS Server上的這段流程。所以需要設定AWS的access client到申請憑證的機器上。
1. 安裝certbot-dns-route53
sudo apt install python3-certbot-dns-route53
其它plugin的名稱也是使用相同的pattern:
python3-certbot-dns-<PLUGIN>
2. 設定AWS的access client
- 到AWS設定一個Policy
{
"Version":"2012-10-17",
"Id": "certbot-dns-route53 sample policy",
"Statement": [
{
"Effect": "Allow",
"Action": [
"route53:ListHostedZones",
"route53:GetChange"
],
"Resource": [
"*"
]
},
{
"Effect" : "Allow",
"Action" : [
"route53:ChangeResourceRecordSets"
],
"Resource" : [
"arn:aws:route53:::hostedzone/YOURHOSTEDZONEID"
]
}
]
}
-
Version
的值不能改,這是告訴AWS要用這版的規則來看這個Policy -
YOURHOSTEDZONEID
:去Route53點選要設定的domain name,就會寫出它的host zone ID(託管區域ID)了。
-
建立一個IAM account,並且授予它上面的policy權限
-
在要執行certbot的機器上建立一個config檔,叫~/.aws/config內容如下
[default]
aws_access_key_id=<IAM的ID>
aws_secret_access_key=<IAM的secret key>
注意,如果執行certbot需要使用sudo來執行,這個config必須改放到
/root/.aws/config
。
- 執行certbot
sudo certbot certonly --dns-route53 -d rd2.team.araliadata.io
-
如果有要申請wildcard網域,需要多加上*.rd2.team.araliadata.io才需要有這段
-
—-post-hook
:當certbot完成執行後,會在本地執行的動作。
- 設定排程執行
sudo certbot renew
,它會自行檢查是否有憑證快要到期了,如果快要到期才會真的再次申請新的憑證下來。
sudo certbot renew --cert-name <憑證名稱> --post-hook "docker compose -f /home/bigobject/data-planet-testbed/ambrose/docker-compose.yml down & /home/bigobject/data-planet-testbed/ambrose/docker-compose.yml up -d"
-
憑證名稱:可以使用certbot certificates來查看
-
certbot renew
:當憑證會在30天內到期時,真的去申請新的憑證,還未到期不會真的去申請新的憑證。
ex: 每週一檢查一次
#sudo crontab -e
0 0 * * 1 sudo certbot renew --cert-name rd2.team.araliadata.io --post-hook "docker compose -f /home/bigobject/data-planet-testbed/ambrose/docker-compose.yml down & /home/bigobject/data-planet-testbed/ambrose/docker-compose.yml up -d"
提醒
-
可以先加上
--dry-run
,用來測試server申請憑證是否能成功,以防操作太多次,超過額度,不給申請。 -
使用
--manual
的憑證申請,不能使用renew功能,除非有加上authentication hook,例如上面提到的route-53 plugin。 -
route-53 plugin其實就是用script連到route-53服務,新增對應的ACME challenge TXT。
-
ACME的驗證(
--preferred-challenges
),如果選擇使用DNS的方式驗證,需要使用--manual
才能做。除非加上DNS插件驗證(如route53)。