HTTPSの設定
私はHTTPSサーバを設定する多くの方法を試みました、そして、私は最後に大好きなメソッドを見つけました.
生産証明書を支払う代わりに、Cerbot https://certbot.eff.org/とLetsEncrypt https://letsencrypt.org/を通して、あなた自身の証明書を確認するのは簡単です.
以下の流れはUbuntuのためのものです.そして、あなたの実際のバックエンドによってサーブしたファイルを持っているのと対照的にファイルを提供するためにNGinxを使用します.あなたがサーバーに完全なアクセスをするならば、私はこの解決がよりエレガントであるとわかります.
Cerbotのインストールと証明書の受信
インストール
Ubuntuの場合は20 :
2 . certbotの実行
3 . Certbot用の右データを提供するnginxを設定します
検証の終了
Certbotに戻ってくださいEnterキーを押すとプロンプトが表示されます.確認してください.
証明書の使用
新しく作成された証明書は、ルートhttps://certbot.eff.org/docs/using.html#where-are-my-certificatesでのみ利用可能です
nginxの設定
httpsのポートサフィックスでサーバを利用できるようにするには、ポート443で実行する必要があります.それはLinuxで高い特権を必要とします、そして、ノードを走らせるのは良い考えでありません.しかし、Nginxは完全にこれのためにちょうど適しています.
ポートレスアクセスを設定する良い方法はnginx経由でポート転送を設定することです.HTTP(ポート80)からリダイレクトを構成することも可能ですが、この設定ポート80では、証明書ファイルを提供するだけです.
Nginxなしで走る
これらの環境変数へのプロジェクトへのアクセス
例えば、ノード.以下のようにロードします.
devで動く
上記のように、これらの証明書を使用してサーバー上で動作しますが、開発中に実行する良い方法は何ですか?
HTTPを使用するか、または自己署名証明書を発行して、それからDEVでコードベースのいろいろな部分で自己署名証明書を受け入れるのは一般的です.
代わりに、ローカル認証局を使用してlocalhost証明書を発行するのが好きです.開発環境を最大限に生産的にするのは最もシームレスな方法です.
これは、魔法のツールmkcert(https://github.com/FiloSottile/mkcert)で行うことができ、それは音よりも簡単です
メンテナンス
発行証明書は3ヶ月有効です.残り時間を取得するには、次のコマンドを実行します.
Certbotは自動化されるように構築されています-ので、好きならcrontabを設定する独自のスタイルを選択します.汎用renewコマンドは
生産証明書を支払う代わりに、Cerbot https://certbot.eff.org/とLetsEncrypt https://letsencrypt.org/を通して、あなた自身の証明書を確認するのは簡単です.
以下の流れはUbuntuのためのものです.そして、あなたの実際のバックエンドによってサーブしたファイルを持っているのと対照的にファイルを提供するためにNGinxを使用します.あなたがサーバーに完全なアクセスをするならば、私はこの解決がよりエレガントであるとわかります.
Cerbotのインストールと証明書の受信
インストール
Ubuntuの場合は20 :
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
以前のバージョンsudo add-apt-repository ppa:certbot/certbo
sudo apt-get update
sudo apt-get install certbot
2 . certbotの実行
sudo certbot certonly --manual
これは、プロンプトで停止しますそれを開いて、次の手順に従ってください.3 . Certbot用の右データを提供するnginxを設定します
# Snap didn't have nginx when I was doing this setup, so:
sudo apt install nginx
sudo ufw allow 'Nginx HTTP'
(https://docs.nginx.com/nginx/admin-guide/web-server/serving-static-content/参照)# By default nginx will serve files from /var/www/html
# Put the cert there by default, or see what works best for your setup:
sudo mkdir /var/www/html/.well-known
sudo mkdir /var/www/html/.well-known/acme-challenge
sudo vim /var/www/html/.well-known/acme-challenge/<filename from certbot>
<copy in certbot data>
sudo chmod a=r /var/www/html/.well-known/acme-challenge/<filename from certbot>
# We don't need to change anything with the above folder structure.
# Alternatively, we can change the config
sudo vim /etc/nginx/sites-enabled/default
# If you do change the config, reload nginx
sudo systemctl reload nginx
検証の終了
Certbotに戻ってくださいEnterキーを押すとプロンプトが表示されます.確認してください.
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/yourdomain.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/yourdomain.com/privkey.pem
Your certificate will expire on 2021-06-07. To obtain a new or
tweaked version of this certificate in the future, simply run
certbot again. To non-interactively renew *all* of your
certificates, run "certbot renew"
証明書の使用
新しく作成された証明書は、ルートhttps://certbot.eff.org/docs/using.html#where-are-my-certificatesでのみ利用可能です
sudo chmod 0755 /etc/letsencrypt/{live,archive}
# In the doc above, this isn't mentioned as necessary, but I couldn't get access to the privkey w/o being explicit
sudo chmod 0755 /etc/letsencrypt/live/yourdomain.com/privkey.pem
今、あなたはいずれかのサービスによって直接これらの証明書を使用するか、またはNGNX取引をその層とすることを選択することができます.nginxの設定
httpsのポートサフィックスでサーバを利用できるようにするには、ポート443で実行する必要があります.それはLinuxで高い特権を必要とします、そして、ノードを走らせるのは良い考えでありません.しかし、Nginxは完全にこれのためにちょうど適しています.
ポートレスアクセスを設定する良い方法はnginx経由でポート転送を設定することです.HTTP(ポート80)からリダイレクトを構成することも可能ですが、この設定ポート80では、証明書ファイルを提供するだけです.
# Open the nginx config
sudo vim /etc/nginx/sites-available/default
# Then, here is an example of a working config:
# This is just to serve the data that certbot wants, it's nginx's default config
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
}
# Port forwarding - this is what we want to add
server {
listen 443 ssl; # https://stackoverflow.com/questions/51703109/nginx-the-ssl-directive-is-deprecated-use-the-listen-ssl
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/yourdomain.access.log;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# NOTE: This will also work if you use
# proxy_pass https://localhost:8443;
# This could be desirable to e.g. use https
# for the app in all environments - that way
# you can run in development w/o nginx on https.
proxy_pass http://localhost:8080;
proxy_read_timeout 90;
# Just make sure to also update this to
# proxy_redirect https://localhost:8443 https://yourdomain.com;
# if you want to use https for the server
proxy_redirect http://localhost:8080 https://yourdomain.com;
}
}
あなたの実際のドメインとyourdomain.com
sudo systemctl reload nginx
Nginxなしで走る
これらの環境変数へのプロジェクトへのアクセス
SSL_PRIVATE_KEY_PATH = /etc/letsencrypt/live/yourdomain.com/privkey.pem
SSL_CERTIFICATE_PATH = /etc/letsencrypt/live/yourdomain.com/fullchain.pem
注意:このスタイルはnginx設定で動作します.はい、あなたのアプリケーションのための同じ証明書を使用することができますNGinxは、それらを受け入れるでしょうポートの転送が正しく動作します.例えば、ノード.以下のようにロードします.
const fs = require('fs')
const express = require('express')
const https = require('https')
const loadSsl = () => {
const privateKey = fs.readFileSync(process.env.SSL_PRIVATE_KEY_PATH, 'utf8')
const certificate = fs.readFileSync(process.env.SSL_CERTIFICATE_PATH, 'utf8')
return { key: privateKey, cert: certificate }
}
const express = express()
const server = https.createServer(loadSsl(), express)
server.listen(process.env.PORT, () => { // e.g. port 8443
console.log(`Server live on port ${process.env.PORT}`)
})
そして今、あなたはyourdomain.com:PORT
(ポート接尾辞を取り除くために上のnginxセットアップに従ってください)であなたのサービスにアクセスすることができます.devで動く
上記のように、これらの証明書を使用してサーバー上で動作しますが、開発中に実行する良い方法は何ですか?
HTTPを使用するか、または自己署名証明書を発行して、それからDEVでコードベースのいろいろな部分で自己署名証明書を受け入れるのは一般的です.
代わりに、ローカル認証局を使用してlocalhost証明書を発行するのが好きです.開発環境を最大限に生産的にするのは最もシームレスな方法です.
これは、魔法のツールmkcert(https://github.com/FiloSottile/mkcert)で行うことができ、それは音よりも簡単です
# Only do this once for all mkcert projects
brew install mkcert
brew install nss # for Firefox
mkcert -install
# Set up this repo with mkcert certificates
# I personally just keep my mkcert right in the folder of the repo.
# Don't forget to add the directory to .gitignore!
mkdir mkcert
cd mkcert
mkcert localhost
現在devでは、これらを環境に追加します(前のセクションからhttpsのロードロジックを持っていると仮定します).SSL_PRIVATE_KEY_PATH = mkcert/localhost-key.pem
SSL_CERTIFICATE_PATH = mkcert/localhost.pem
メンテナンス
発行証明書は3ヶ月有効です.残り時間を取得するには、次のコマンドを実行します.
sudo certbot certificates
新しい証明書を手動で再発行するには、次の手順に従います.sudo certbot --force-renewal
これはCERTBOTからのすべての証明書を更新します(すなわち、1つのマシンで複数の証明書とサービスをサポートすることを意図しています).Certbotは自動化されるように構築されています-ので、好きならcrontabを設定する独自のスタイルを選択します.汎用renewコマンドは
sudo certbot renew
詳細については、https://certbot.eff.org/docs/using.html?highlight=renew#renewing-certificatesを参照してくださいReference
この問題について(HTTPSの設定), 我々は、より多くの情報をここで見つけました https://dev.to/alexeydc/modern-https-configuration-2h86テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol