GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu18.04でNginxの自己署名SSL証明書を作成する方法

SSLは「SecureSocketsLayer」の略で、WebサーバーとWebブラウザの間に暗号化されたリンクを作成するための標準的なセキュリティテクノロジです。このリンクにより、サーバーとブラウザー間で受け渡されるすべての情報が非公開で安全に保たれます。 SSL証明書の主な目的は、Webサイトのセキュリティを確保し、クライアントとブラウザ間で転送されるデータを暗号化して、クレジットカードの詳細、アカウント番号、パスワードなどの機密情報の盗難を防ぐことです。

自己署名証明書は、信頼できる認証局(CA)ではなく、作成者が署名した証明書です。ほとんどのクライアントと組織は、主にコストの違いのために、信頼できる認証局によって発行および検証されたものではなく、自己署名SSL証明書を使用するように誘惑されます。ただし、それでも限界まで同じレベルの暗号化を提供します。

この記事では、NginxWebサーバーを使用してUbuntu18.04サーバーで自己署名SSL証明書を作成する方法について説明します。

前提条件

ルート権限とOpenSSLライブラリを備えた適切に構成されたサーバー。独自の証明書を生成するには、OpenSSLライブラリが必要です。 ubuntuサーバーで次のコマンドを実行して、OpenSSLが既にインストールされているかどうかを確認します。

# which openssl
/usr/bin/openssl

whichコマンドがバイナリを返さなかった場合は、次のコマンドを使用してインストールする必要があります。

#apt install openssl

自己署名証明書の作成

SSLは、主に2つの部分で構成され、1つは秘密鍵で、もう1つは公開証明書です。 SSLキーは、rootユーザーに制限されたサーバー上で秘密にされます。実際には、クライアントに送信されるコンテンツを暗号化するために使用されます。公開SSL証明書は、コンテンツを要求するすべての人と共有されます。関連する秘密SSLキーによって署名されたコンテンツを復号化するために使用できます。ここでは、このコマンドを使用して、OpenSSLツールを使用して自己署名証明書(example.com.crt)と秘密鍵example.com.key(ここではファイル名としてexample.com.pemを使用しています)を生成しています。

#openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.pem

以下の各オプションの詳細をご覧ください:

  • req:このサブコマンドは、新しいX.509証明書を作成するために使用されます。 「X.509」は、SSLとTLSが鍵と証明書の管理のために準拠している公開鍵インフラストラクチャ標準です。
  • -x509:これは、自己署名証明書を作成することをユーティリティに通知することにより、前のサブコマンドをさらに変更します。
  • -nodes:これは、証明書を保護するためにパスフレーズオプションをスキップするために使用されます。
  • -365日:このオプションは、証明書の有効期間を日数で設定します。ここで1年間設定します。
  • -newkey rsa:2048:これは、証明書とともに2048ビット長の新しいRSAキーを生成することを指定します。
  • -keyout:このオプションは、生成された秘密鍵ファイルを配置する場所をOpenSSLに指示します。
  • -out:このオプションは、生成された証明書を配置する場所をOpenSSLに指示します。

このコマンドの実行中に、証明書署名要求(CSR)を生成するためのドメイン/クライアントの詳細を提供するように求められます。必要に応じて、これらの詳細を提供できます。

Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:Victoria
Locality Name (eg, city) []:Melbourne
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Linoxide LLC
Organizational Unit Name (eg, section) []:Web
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:[email protected]

これで、新しく生成された自己署名証明書が作成され、秘密鍵は次の場所にあります。/etc/ssl/certs/example.com.pem および/etc/ssl/private/example.com.key 。次に、クライアントとのPerfect Forward Secrecyのネゴシエーションに使用される、強力なDiffie-Hellmanグループを作成する必要があります。このコマンドを実行して作成できます。

#openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

これは完了するまでに時間がかかる場合がありますが、完了すると、/etc/ssl/certs/dhparam.pemに強力なDHグループが作成されます。 構成で使用できます。

自己署名証明書を使用するようにNginxを構成する

始める前に、NginxWebサーバーがUbuntu18.04サーバーにインストールされていることを確認する必要があります。インストールされていない場合は、次の簡単なコマンドを使用してインストールできます。

#apt install nginx

このサービスをサーバーにインストールして有効にしました。

# nginx -v
nginx version: nginx/1.14.0 (Ubuntu)

#systemctl enable nginx
#systemctl start nginx
#systemctl status nginx

次。 SSLを使用するようにNginxを構成できます。それを3つのステップで説明します:

  1. 生成されたSSL証明書の詳細を使用してスニペット構成を作成します。
  2. SSLの脆弱性の可能性を克服する強力で安全なSSL設定を維持するためのスニペット構成を作成します。
  3. 上記のスニペット構成でドメイン仮想ホストを更新してSSLを有効にする

ステップ1:SSL証明書の詳細を使用してスニペット構成を作成する

生成された自己署名証明書の詳細をNginxスニペットフォルダー内にポイントするための新しいスニペット構成ファイル「self-signed.conf」を作成しましょう:/etc/nginx/snippets/ 以下のように:

# cat /etc/nginx/snippets/self-signed.conf
# Self signed certificates generated by the ssl-cert package
# Don't use them in a production server!

ssl_certificate /etc/ssl/certs/example.com.pem;
ssl_certificate_key /etc/ssl/private/example.com.key;

ここで、生成された証明書パスを指定する必要があります:/etc/ssl/certs/example.com.pem およびキーパス:/etc/ssl/private/example.com.key 上記のディレクティブの場合。

ステップ2:SSLの脆弱性の可能性を克服する強力で安全なSSL設定を維持するためのスニペット構成を作成する

次に、SSLの脆弱性からサーバーを保護する、完全に機能する強力なSSLサーバー構成を維持する必要があります。強力なSSL暗号スイートを使用してNginxを構成し、サーバーのセキュリティを確保するためにいくつかの高度な機能を有効にしました。これらのパラメータはすべてファイルに含まれています:/etc/nginx/snippets/ssl-params.conf

cat /etc/nginx/snippets/ssl-params.conf
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling off;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

ssl_dhparam /etc/ssl/certs/dhparam.pem;

これらのNginxCipherの推奨事項は、Cipherリストで入手できます。これらのパラメーターは、SSLの将来のNginx構成で使用されます。ご覧のとおり、ssl_dhparamを設定しました ここで先に生成したDiffie-Hellmanファイルを指すように設定します。自己署名証明書を使用しているため、SSL stapling 使用されません。したがって、offをオフにしました そうしないと、Nginxは次のような警告を出力しますnginx: [warn] "ssl_stapling" ignored, issuer certificate not found for certificate 。これらの変更を行った後、構成を保存して終了できます。

ステップ3:上記のスニペット構成でドメイン仮想ホストを更新してSSLを有効にする

必要なスニペット構成の準備ができました。これで、ドメイン仮想ホストにそれらを含めて、SSLを有効にすることができます。この記事では、/etc/nginx/sites-available/defaultにあるデフォルトのNginx構成ファイルを使用しています。 。このファイルを変更してSSLを有効にし、生成された自己署名証明書を取得しました。この構成で以下の変更されたセクションを参照してください:

cat /etc/nginx/sites-available/default

#
server {
listen 80 default_server;
listen [::]:80 default_server;

# SSL configuration

listen 443 ssl default_server;
listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
include snippets/self-signed.conf;
include snippets/ssl-params.conf;

これで、これらの構成を保存し、Nginxサービスを再起動して、これらの変更を有効にすることができます。

# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#systemctl restart nginx

テスト

これが最後のステップです。ブラウザを開いて、URL>> https://Server_IP or HostnameでサーバーIPにアクセスしてみてください。 。自己署名証明書を使用しているため、セキュリティ警告が表示されます。その警告を無視し、クリックしてセキュリティを確認すると、スナップショットに示されているようにさらに先に進むことができます。

また読む:

  • Mkcert-Linuxでのローカル開発用のSSL証明書を作成する
  • Ubuntu18.04にLet'sEncryptSSL証明書をインストールする方法
  • Dockerを使用してNGINXをリバースプロキシとして設定する方法

それで全部です!安全なクライアント接続のための強力な暗号化方式を使用して、自己署名証明書を使用してNginxを正常に構成しました。この記事がお役に立てば幸いです。これに関する貴重なコメントや提案を投稿してください。


Ubuntu
  1. cPanelに自己署名SSL証明書をインストールする方法

  2. OSXでMac用の起動可能なUbuntuUSBドライブを作成する方法

  3. Ubuntu18.04で自己署名SSL証明書を作成する方法

  1. Apache 2がSSL証明書のパスワードを要求するのをやめるにはどうすればよいですか?

  2. UbuntuでSSLクライアント証明書/キーをグローバルに追加する方法は?

  3. SSL キーのアクセス許可?

  1. NGINXにSSL証明書をインストールする方法

  2. Kubernetesの自己署名証明書を生成する方法

  3. Wireguardを使用してUbuntu20.04でVPNを作成する方法