セットアップLet'sEncrypt for Express

人気の無料ソリューションLet'sEncryptを使用してHTTPSを設定する方法

独自のVPSでNode.jsアプリケーションを実行する場合は、SSL証明書を取得するためのソリューションが必要になります。

今日、これを行うための標準は使用することです暗号化しましょうそしてCertbot、からのツールEFF、別名Electronic Frontier Foundationは、プライバシー、言論の自由、およびデジタル世界における一般的な市民の自由に焦点を当てた主要な非営利団体です。

これから実行する手順は次のとおりです。

Certbotをインストールします

これらの手順は、Ubuntu、Debian、またはを使用するその他のLinuxディストリビューションを使用していることを前提としています。apt-getパッケージを管理するには:

sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot

テスト目的で、MacにCertbotをインストールすることもできます(必須自作):

brew install certbot

ただし、それを使用するには、実際のドメイン名にリンクする必要があります。

Certbotを使用してSSL証明書を生成する

Certbotがインストールされたので、Certbotを呼び出して証明書を生成できます。これをrootとして実行する必要があります。

certbot certonly --manual

…またはroot以外のユーザーからsudoを呼び出します。

sudo certbot certonly --manual

これは詳細なプロセスです:

インストーラーはあなたのウェブサイトのドメインを提供するようにあなたに頼みます。

…それからあなたの電子メールを要求します:

➜ sudo certbot certonly --manual
Password: XXXXXXXXXXXXXXXXXX
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected]

…そしてToSを受け入れるために:

Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory

(A)gree/©ancel: A

…そしてあなたのメールアドレスを共有する許可を得るために:

Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

…最後に、SSL証明書を使用するドメインを入力できます。

Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
to cancel): copesflavio.com

…インストーラーは、IPアドレスをログに記録してもよいかどうかを尋ねます。

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for copesflavio.com

NOTE: The IP of this machine will be publicly logged as having requested this certificate. If you’re running certbot in manual mode on a machine that is not your server, please ensure you’re okay with that.

Are you OK with your IP being logged?


(Y)es/(N)o: y

…そして最後に検証フェーズに進みます!

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Create a file containing just this data:

TS_oZ2-ji23jrio3j2irj3iroj_U51u1o0x7rrDY2E.1DzOo_voCOsrpddP_2kpoek2opeko2pke-UAPb21sW1c

And make it available on your web server at this URL:

http://copesflavio.com/.well-known/acme-challenge/TS_oZ2-ji23jrio3j2irj3iroj_U51u1o0x7rrDY2E

それでは、Certbotを数分間そのままにしておきましょう。

次の名前のファイルを作成して、ドメインを所有していることを確認する必要がありますTS_oZ2-ji23jrio3j2irj3iroj_U51u1o0x7rrDY2Eの中に.well-known/acme-challenge/フォルダ。注意を払う!貼り付けたばかりの奇妙な文字列は、このプロセスを実行するたびに変化します。

デフォルトでは存在しないため、フォルダとファイルを作成する必要があります。

このファイルには、Certbotが印刷したコンテンツを入れる必要があります。

TS_oZ2-ji23jrio3j2irj3iroj_U51u1o0x7rrDY2E.1DzOo_voCOsrpddP_2kpoek2opeko2pke-UAPb21sW1c

ファイル名に関しては、この文字列はCertbotを実行するたびに一意です。

Expressが静的ファイルを提供できるようにする

Expressからそのファイルを提供するには、静的ファイルの提供を有効にする必要があります。あなたは作成することができますstaticフォルダを追加し、そこに追加します.well-knownサブフォルダーを作成し、Expressを次のように構成します。

const express = require('express')
const app = express()

//… app.use(express.static(__dirname + ‘/static’, { dotfiles: ‘allow’ }))

//…

ザ・dotfilesそれ以外の場合、オプションは必須です.well-known、(ドットで始まる)ドットファイルは表示されません。ドットファイルには機密情報が含まれている可能性があり、デフォルトで保存したほうがよいため、これはセキュリティ対策です。

ドメインを確認する

次に、アプリケーションを実行し、パブリックインターネットからファイルにアクセスできることを確認します。まだ実行中のCertbotに戻り、Enterキーを押してスクリプトを続行します。

証明書を取得する

それでおしまい!すべてがうまくいけば、Certbotは証明書と秘密鍵を作成し、それらをコンピューター上のフォルダーで使用できるようにしました(もちろん、どのフォルダーかがわかります)。

ここで、パスをコピーしてアプリケーションに貼り付けるだけで、パスを使用してリクエストを処理できるようになります。

const fs = require('fs')
const https = require('https')
const app = express()

app.get(’/’, (req, res) => { res.send(‘Hello HTTPS!’) })

https .createServer( { key: fs.readFileSync(’/etc/letsencrypt/path/to/key.pem’), cert: fs.readFileSync(’/etc/letsencrypt/path/to/cert.pem’), ca: fs.readFileSync(’/etc/letsencrypt/path/to/chain.pem’), }, app ) .listen(443, () => { console.log(‘Listening…’) })

このサーバーをポート443でリッスンさせたため、root権限で実行する必要があることに注意してください。

また、私が使用したので、サーバーはHTTPSで排他的に実行されていますhttps.createServer()。次のコマンドを実行して、これと一緒にHTTPサーバーをデプロイすることもできます。

http.createServer(app).listen(80, () => {
  console.log('Listening...')
})

https .createServer( { key: fs.readFileSync(’/etc/letsencrypt/path/to/key.pem’), cert: fs.readFileSync(’/etc/letsencrypt/path/to/cert.pem’), ca: fs.readFileSync(’/etc/letsencrypt/path/to/chain.pem’), }, app ) .listen(443, () => { console.log(‘Listening…’) })

更新を設定します

SSL証明書の有効期間は90日間のみであるため、SSL証明書を更新するための自動システムをセットアップする必要があります。

どうやって? cronジョブを使用します。

cronジョブは、指定された時間間隔でタスクを実行する方法です。毎週、毎分、毎月などになります。

この例では、Certbotのドキュメントで推奨されているように、更新スクリプトを1日2回実行します。

まず、の絶対パスを見つけますcertbotシステム上で。私が使うtype certbotそれを取得するためにmacOSで、そして私の場合は/usr/local/bin/certbot

実行する必要のあるスクリプトは次のとおりです。

certbot renew

これはcronジョブエントリです。

0 */12 * * * root /usr/local/bin/certbot renew >/dev/null 2>&1

上記は、「12時間ごと、毎日、00:00と12:00に実行する」と述べています。

ヒント:この行はhttps://crontab-generator.org/

次のコマンドを使用して、新しく作成したスクリプトをシステムのcrontabに追加します。

env EDITOR=pico crontab -e

これにより、picoエディター(お好みのエディターで自由に置き換えてください)。新しいスクリプトを入力して保存するだけで、cronジョブがインストールされます。

これが完了すると、次のコマンドを実行して、アクティブなcronジョブのリストを表示できます。

crontab -l

私の無料ダウンロードExpress.jsハンドブック


より明確なチュートリアル: