簡體   English   中英

如何在Heroku上安裝LetsEncrypt SSL證書

[英]How do you install a LetsEncrypt SSL Certificate on Heroku

由於Heroku是只讀的並且不允許sudo,我需要做什么才能在我們的應用程序的服務器上安裝LetsEncrypt.org證書?

如果我已經設置了config.force_ssl = true那重要嗎?

我在這里的第一個答案中閱讀了博客文章,但我不想用ACME網址和邏輯來污染我的代碼庫。 所以我做了類似的事情,但使用了DNS域驗證...

使用certbot,將DNS指定為首選挑戰:

sudo certbot certonly --manual --preferred-challenges dns

在幾次提示之后,certbot會告訴您保留DNS TXT記錄以驗證您的域名:

Please deploy a DNS TXT record under the name
_acme-challenge.www.codesy.io with the following value:

CxYdvM...5WvXR0

Once this is deployed,
Press ENTER to continue

您的域名注冊商可能擁有自己的部署TXT記錄的文檔。 這樣做,然后回到certbot並按ENTER鍵 - 讓我們加密將檢查TXT記錄,簽署證書,certbot將保存它以供您上傳到heroku。

有關詳細信息,請參閱我自己的博文


以下是兩個bash函數,您可以使用它們為您自動執行該過程

function makessl {
    sudo certbot certonly --manual --rsa-key-size 4096 --preferred-challenges dns -d ${1}
    sudo heroku certs:add --type=sni /etc/letsencrypt/live/${1}/fullchain.pem /etc/letsencrypt/live/${1}/privkey.pem
}

function renewssl {
    sudo certbot certonly --manual --rsa-key-size 4096 --preferred-challenges dns -d ${1}
    sudo heroku certs:update /etc/letsencrypt/live/${1}/fullchain.pem /etc/letsencrypt/live/${1}/privkey.pem
}

他們會對域名進行爭論,只要您在heroku app folder運行它們,就不必指定--app NAME

示例: makessl www.domain.com

示例: renewssl www.domain.com


結合這是@Eric的答案,你很高興:

heroku certs:auto:enable

僅供參考,Heroku現在提供帶有Let's Encrypt的自動化證書管理,如果您運行付費dyno。 您可以啟用它:

heroku certs:auto:enable

更多信息:

https://devcenter.heroku.com/articles/automated-certificate-management

編輯:此答案不再適用。

它是在Heroku實現對LetsEncrypt的原生支持之前編寫的。 留下余子給后人,但這不再是必要的。 立即使用@ Eric的答案


安裝初始證書

您可以在手動模式下使用certbot生成質詢響應,修改站點以返回響應,然后最終完成certbot手動過程。

有關詳細信息,請參閱Daniel Morrison撰寫的此博客文章 ,或下面的證書更新下的鏈接答案。

證書更新

正如@Flimm提到的那樣,正如鏈接博客文章中提到的那樣,你必須每3個月更新一次,直到Heroku為LetsEncrypt提供更好的支持。 您可以使用環境變量使該過程更順暢(無需更改代碼),如本答案中所述(Node / Express,但概念相同): https//stackoverflow.com/a/40199581/37168

沙巴翁

有一個GitHub項目可以通過設置Heroku環境變量來自動完成所有這些。 這是一個小型的webapp,你安裝為另一個Heroku應用程序,反過來配置你的主要應用程序。 我還沒有嘗試過,但我計划下次使用它而不是更新我的證書: https//github.com/dmathieu/sabayon

Heroku的默認建議是使用服務器名稱指示(SNI)的SSL,這是免費的。 由於您已經獲得了證書和密鑰,因此可以通過以下方式添加它們:

heroku certs:add <cert>.pem <key>.key

如果您需要支持不支持SNI的舊版瀏覽器客戶端,請使用價格為20美元/月的Herkou SSL端點插件:

通過運行添加該插件

heroku addons:create ssl:endpoint

然后添加您的LetsEncrypt.org證書:

heroku certs:add <cert>.pem <key>.key

最好的方法是將新的ssl域(以https開頭)分配給您的域,該域自動覆蓋非http域

我創建了一個certbot插件,它使用Heroku CLI自動驗證和安裝Let的加密證書: https//github.com/gboudreau/certbot-heroku

我只有一個使用php-nginx Heroku buildpack的例子,但閱讀該示例並找到其他buildpack的等價物應該很容易。 歡迎提出拉請求幫助他人!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM