序章

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

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

注:使用できるさまざまな曲線があります。 この記事を単純にするために、prime256v1曲線を使用しています。

要件

  • Debian 7.0Wheezyのドロップレット。
  • OpenSSLがインストールおよび更新されました。

走る:

	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は、Dropletの大量のメモリを消費することなく、多数の同時リクエストを処理できる高性能HTTPサーバーです。 追加のパッケージをインストールする必要があります。 インストールを受け入れるには、 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) []:example.com
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のデフォルトの仮想ホスト構成ファイルの下部近くに、次の行を持つHTTPSサーバーの構成例があります。 listen 443; 上部近く。 次の例に一致するように、行のコメントを解除し、HTTPSサーバーブロックを更新します。 ほとんどの行を編集することになりますので、注意してください。

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

#HTTPS server
#
server {
	listen 443;
	server_name Your IP Address or Hostname;
#
	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サーバーブロックが上記の例と一致したら、変更を保存します。

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

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

service nginx restart

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

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

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

https://IPまたはホスト名

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

証明書を受け入れます。

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

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

サブジェクトの公開鍵フィールドには、256ビットの公開鍵サイズが表示されます。

おめでとう! これで、NginxサーバーがECC秘密鍵と証明書で構成されました。