Debian 7のNginxでECC証明書を作成する方法

前書き

このチュートリアルでは、高性能HTTPサーバーであるNginxで使用する楕円曲線暗号(ECC)の公開キーと秘密キーのペアを作成する方法を示します。 ECCキーには、従来のRSAキーに比べていくつかの利点があります。 ECCキーは、サイズが小さいながら大きなRSAキーと同等のセキュリティを提供し、サーバーで必要なリソースを削減し、モバイルデバイスのパフォーマンスを高速化します。

ECCを使用すると、ストリーミングメディア、VPN接続、またはその他の高帯域幅アプリケーションのパフォーマンスが向上する可能性があります。 シマンテックのような認証局(CA)は、ECCまたは E 楕円 C urve C 暗号化証明書の提供を開始しました。 Forward SecrecyまたはPerfect Forward Secrecyを使用する前にWebサイトに接続している場合は、楕円曲線暗号を使用しています。 このガイドでは、* prime256v1 *曲線を使用して、Debian Wheezyシステム上のNginxで自己署名ECC秘密鍵と公開証明書を展開するために必要な手順を詳しく説明します。

*注意:*使用できるさまざまな曲線があります。 この記事をシンプルにするために、prime256v1曲線を使用しています。

必要条件

  • * Debian 7.0 Wheezy *のドロップレット。

  • OpenSSLがインストールおよび更新されました。

Run:

   apt-get update && apt-get upgrade

更新後、Dropletを再起動することをお勧めします。

  • 最新のブラウザ:Internet Explorer 7以降(Windows Vista、Windows 7)、Firefox 19以降(Linux、Mac、Windows)、またはChrome 25以降(Android、Linux、Mac、Windows)。 このチュートリアルでは、テストにFirefoxを使用します。

以下のコマンドはすべて、rootユーザーとして実行する必要があります。

ステップ1:Nginxをインストールする

apt-getパッケージマネージャーでNginxをインストールします。 Nginxは高性能のHTTPサーバーであり、Dropletで大量のメモリを消費することなく、多数の同時リクエストを処理できます。 追加のパッケージをインストールする必要があります。 インストールを受け入れるには、* Y を入力し、 Enter *キーを押します。

apt-get install nginx

ステップ2:ECC秘密鍵を生成して署名する

秘密鍵、証明書署名要求、およびサーバー証明書を保存するディレクトリを作成します。 ディレクトリ「+ / etc / nginx / ssl」を作成することをお勧めします。 次に、ディレクトリに移動します。

mkdir /etc/nginx/ssl
cd /etc/nginx/ssl

OpenSSLの* ecparam *ツールを使用してECC秘密鍵を生成します。 このコマンドは、prime256v1 ECC曲線を使用して256ビットの秘密鍵を生成し、その鍵を「+ privatekey.key +」という名前のファイル内に保存します。 この256ビットキーは、2048ビットRSA秘密キーに相当します。

openssl ecparam -out privatekey.key -name prime256v1 -genkey

OpenSSLを使用して、証明書署名要求を生成します。

openssl req -new -key privatekey.key -out csr.pem

このコマンドを実行すると、いくつかの質問が表示されます。 * Common Name *プロンプトでは、サーバーのIPアドレスまたはホスト名を入力してください。 チャレンジパスワードを提供しないでください。 他のすべてのフィールドには、必要に応じて情報が入力される場合があります。

You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:New York
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Digital Ocean Tutorial
Organizational Unit Name (eg, section) []:ECC Certificate Test
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

Please enter the following 'extra' attributes to be sent with your certificate request
A challenge password []:
An optional company name []:

*注意:*この時点で、署名のために認証局に証明書を送信できます。 選択したCAの指示に従ってください。 シマンテックは現在ECC証明書を提供しており、将来的にはより多くの認証局がECC証明書を提供する予定です。 このガイドでは、代わりに自己署名証明書が作成されます。

証明書または公開キーを作成します。 証明書は、サーバーのみが読み取れるデータを暗号化するためにクライアントによって使用されます。 OpenSSL x509ツールは、証明書署名要求(CSR)を使用して自己署名証明書を作成するために使用されます。 証明書をより長い期間有効にしたい場合は、 `+ -days +`の値を365から3650に変更して、10年間有効な証明書を作成できます。

openssl req -x509 -days 365 -key privatekey.key -in csr.pem -out certificate.pem

他のユーザーがプライベートキーと証明書にアクセスできないように、ファイルのアクセス許可を設定します。

chmod 600 /etc/nginx/ssl/*

手順3:ECCキーと証明書を使用してNginxを構成する

選択したテキストエディターを使用して、デフォルトのNginx仮想ホスト構成を開きます。 デフォルトでは、Nginxパッケージ構成ファイルはHTTPリクエストのみを処理するように設定されています。 次に、HTTPS要求を処理するようにNginxを構成します。

vi /etc/nginx/sites-enabled/default

Nginxのデフォルトの仮想ホスト構成ファイルの下部近くには、上部に `+ listen 443; +`という行があるHTTPSサーバーのサンプル構成があります。 行のコメントを解除し、HTTPSサーバーブロックを更新して、以下に示す例に一致させます。 ほとんどの行を編集するので、注意してください!

値を変更するときは、必ず各行の最後にセミコロン(;)を残してください。

#HTTPS server
#
server {
   listen 443;
   server_name ;
#
   root /usr/share/nginx/www;
   index index.html index.htm;
#
   ssl on;
   ssl_certificate /etc/nginx/ssl/certificate.pem;
   ssl_certificate_key /etc/nginx/ssl/privatekey.key;
#
   ssl_session_timeout 5m;
#
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_ciphers HIGH+kEECDH+AESGCM:HIGH+kEECDH:HIGH+kEDH:HIGH:!aNULL;
   ssl_prefer_server_ciphers on;
#
   location / {
       try_files $uri $uri/ =404;
   }
}

HTTPSサーバーブロックが上記の例と一致したら、変更を保存します。

クラウドドロップレットの既存の構成によっては、HTTPSサーバーブロックに追加の変更が必要になる場合があります。 たとえば、クラウドサーバーがPHPを実行している場合、PHPをサポートするためにHTTPブロックに追加した行をHTTPSブロックにコピーします。

Nginxを再起動して、変更を適用します。

service nginx restart

ステップ4:ECCを使用してNginxをテストする

テストにはFirefoxを使用しますが、最新のWebブラウザーはサイトにアクセスし、ECC暗号化を使用して動作します。

Firefoxを使用して、クラウドサーバーのIPアドレスまたはホスト名を参照します。 自己署名証明書の警告を受け入れた後、「nginxへようこそ!」ページが表示されます。 サーバーの証明書は自己署名されており、ウェブブラウザで認識されている認証局によって署名されていないため、証明書の警告が表示されます。

https:// IPORHOSTNAME [https:// IPまたはHOSTNAME]

以下の最初の警告を参照してください。

image:https://assets.digitalocean.com/articles/ECC_Nginx/1.jpg [Firefox証明書情報]

証明書を受け入れます。

Mozilla Firefoxを使用している場合は、アドレスバーのプレフィックス* https:// *の近くにある南京錠をクリックします。 接続情報ウィンドウが表示されます。

image:https://assets.digitalocean.com/articles/ECC_Nginx/2.jpg [Firefox接続情報]

*詳細…​ *ボタンをクリックします。 新しいウィンドウの[セキュリティ]タブで、[証明書の表示]ボタンをクリックします。 *詳細*タブを選択します。 下にスクロールして、*アルゴリズムパラメータ*フィールドを選択します。 以下の*フィールド値*テキスト領域に、ECC証明書を示す*楕円曲線prime256v1 *を含むテキストが表示されます。

image:https://assets.digitalocean.com/articles/ECC_Nginx/3.jpg [Firefox Certificate Viewer]

  • Subject’s Public Key *フィールドには、256ビットの公開キーサイズが表示されます。

image:https://assets.digitalocean.com/articles/ECC_Nginx/4.jpg [Firefox Certificate Viewer]

おめでとうございます。 これで、NginxサーバーはECC秘密キーと証明書で構成されました!