2. OpenSSLでクライアント認証「HTTPSサーバ構築編」
Translate to English / Google
前回は、Solaris 10に付属するOpenSSLで認証局を作成しました。
そこで、今回は作成した認証局でサーバ証明書を署名し、
Sun Java System Web Serverにサーバ証明書をインストールする手順までを
紹介します。
1. まず、はじめにWeb サーバ上で認証局でサーバ証明書を署名する為に
証明書署名要求(CSR)を作成します。
Web サーバの管理画面より、構成より対象のインスタンス(ここではsw-120)を選択し、
「証明書」タブより、「サーバ証明書」タブを押下します。
すると、サーバ証明書の設定の画面で、「要求 …」ボタンがありますので、
「要求 …」ボタンを押下します。
「要求 …」ボタンを押下すると下記の画面が表示されます。ここでは使用可能なトークンを
選択する事ができます。
トークンは、例えば、Sun Crypto Accelerator 6000や、Sun Fire T2000のようなT1プロセッサ等の
H/Wのアクセラレータを使用するような場合に使用します。
このようなH/Wアクセラレータを使用する場合は、トークンを作成しますが、
このウィザードの画面では、それぞれの用途に応じたトークンを選択する事になります。
仮に、Webサーバ以外の物を使用しない場合は、デフォルトの「internal」を選択して下さい。
今回は、Webサーバの中に暗号を保存しますので、「internal」を選択します。
選択した後、「次へ」ボタンを押下してください。
補足:
WebサーバのSSLパフォーマンス
SSLの処理は暗号解析等を行うため、非常にシステムに対して負荷の掛かる作業を行っています。
そこで、SSLの処理を外部のH/Wアクセラレータ等を使用する事により、HTTPS通信における
パフォーマンスを向上させる事ができます。
また、現在RSAによる暗号化が主流ですが、将来的にはECC(楕円暗号化曲線)のアルゴリズムが主流
になる事が予想されます。
ECC(楕円曲線暗号)を使用する事によりRSAに比べ、暗号化強度を向上しても暗号化キーのサイズが
少なく済むため、ネットワーク帯域的にも、SSL処理に対する負荷も軽減できるようになります。
SJS Web Server 7.0 はこのECC もサポートしています。(RSAの場合、暗号化強度を高めるためには
キーサイズを大きくするしか方法はありませんが、ECCは、適用する曲線の選択を変更するだけです。
暗号化強度を強くしたい場合もサイズは比例して大きくなる事はありませんので、より暗号化強度が
必要な環境、もしくは大量のSSL通信が発生する環境の方がECCのメリットを実感できるようになります。)
Sun Java System Web Server 7.0 は下記をサポートしています。
Solaris 10 オペレーティングシステムを使用している場合は、カーネル SSL (KSSL) が使用できます。
SSL 用の暗号化カードハードウェアアクセラレータ(SCA 6000等)を使用してパフォーマンスを向上させることもできます。
Solaris で 64 ビットの Web Server を使用している場合は、UltraSPARC T1 プロセッサの暗号化アクセラレータを使用できます。
docs.sun.comより:SSLパフォーマンス
「次へ」ボタンを押下すると下記の画面が表示されます。ここでは、Webサーバの詳細を入力します。
ここで、注意すべき点は、組織 (o) の項目です。この部分は認証局(CA)を構築した際に、
Organization Name (eg, company)で指定した、組織名と完全一致する必要があります。
仮に異なる名前を入力した場合、認証局(CA)での署名に失敗しますので、注意して下さい。
Organization Name (eg, company) [Unconfigured OpenSSL Installation]:Sun Microsystems K.K. </TD |

次に、証明書のキーの種類を選択します。Sun Java System Web Server 7.0では、RSA,ECCを
サポートしていますので、何れかを選択して「次へ」ボタンを押下して下さい。


「次へ」ボタンを押下すると、下記の画面が表示されます。下記の画面は入力した内容を最終確認する画面です。
入力した内容に問題がない場合は、「完了」ボタンを押下して下さい。

「完了」ボタンを押下すると、下記の画面が表示されます。下記の画面はWebサーバから、認証局(CA)に対して
リクエストする「証明書署名要求(CSR)」の画面になります。ここで表示される、「BEGIN NEW CERTIFICATE REQUEST」から
「END NEW CERTIFICATE REQUEST」までの箇所をマウスで選択しコピー(Ctrl + C)して下さい。

コピーした上記の内容をファイルに保存してください。
> pwd /.vfrCA/work/ssl/CA/server > vi csr.pem
> |
ファイルに保存した後、上記画面の「閉じる」ボタンを押下します。ボタンを押下すると
下記の画面が表示されますので、「配備保留中」のリンクを押下して下さい。
「配備保留中」のリンクを押下すると下記の新規ウィンドウが表示されます。ここで、「配備 …」ボタンを押下
して下さい。
「配備 …」ボタンを押下すると下記の画面が表示されます。ここで「インスタンスを再起動」で「今すぐ」を
選択し、「了解 …」ボタンを押下して下さい。
以上で、Sun Java System Web Server 上に自動的に秘密鍵が生成され、「証明書署名要求(CSR)」までが
生成されました。
次に、上記で作成した証明書署名要求(CSR)を元に、認証局(CA)で実際に署名を行う方法を紹介します。
まず、既存のopenssl.confのコピーを生成し、サーバ証明書を作成する為に若干設定変更を行います。
> cp /etc/sfw/openssl/openssl.cnf /etc/sfw/openssl/openssl-server.cnf |
> vi /etc/sfw/openssl/openssl-server.cnf basicConstraints=CA:FALSE <—FALSEに変更 # This is OK for an SSL server. nsCertType = server <———- ここをコメント会うと |
さてそれでは実際に、認証局で署名を行いましょう。
-config には先ほど修正したファイルを指定します。
-in にはWebサーバで生成した証明書署名要求(CSR)を指定します。
-keyfile には認証局の秘密鍵を指定します。
-cert には認証局の証明書を指定します。
-out には署名済みのWebサーバの生成されたサーバ証明書を指定します。
> openssl ca -config /etc/sfw/openssl/openssl-server.cnf -in ./csr.pem -keyfile /etc/sfw/openssl/private/cakey.pem -cert /etc/sfw/openssl/cacert.pem -out cert.pem
|
ここで生成されたWeb サーバの証明書の中身を確認してみましょう。
> cat cert.pem
> |
以上で、認証局(CA)による署名済みのサーバ証明書が生成されました。
署名済みのサーバ証明書が生成されましたので、ここで生成された証明書を
Web サーバにインストールしましょう。
Web サーバの管理画面より、「構成」→「対象の構成(sw-120)」を選択し、「証明書」タブを
選択後、「サーバ証明書」を選択して下さい。
「サーバ証明書」タブを選択すると「インストール …」ボタンが表示されますので、ボタンを
押下します。
「インストール …」ボタンを押下すると下記の画面が表示されます。ここでトークンを選択し、
「次へ」ボタンを押下して下さい。
「次へ」ボタンを押下すると下記の画面が表示されます。下記の画面では、署名済みの証明書から、
「BEGIN CERTIFICATE」から「END CERTIFICATE」までを画面内にコピー&ペーストして貼付けます。
コピー&ペーストした後「次へ」ボタンを押下して下さい。
「次へ」ボタンを押下すると下記の画面が表示されます。ここでは、Web サーバに保存する証明書の
ニックネームを入力します。
分かり易いニックネームを入力して、「次へ」ボタンを押下して下さい。
「次へ」ボタンを押下すると下記の画面を表示されます。ここではインストールする証明書の内容を
確認する画面になります。
問題がない場合は、「完了」ボタンを押下してください。
「完了」ボタンを押下すると下記の画面が表示されます。「Installation of Certificate successful」が
表示されれば、正常に認証局(CA)で署名されたサーバ証明書がインストールされています。
「完了」ボタンを押下すると、下記の画面が表示されます。ここで、「配備保留中」のリンクを押下して下さい。
「配備保留中」のリンクを押下すると下記の新規ウィンドウが表示されます。ここで、「配備」ボタンを
押下して下さい。
「配備」ボタンを押下した後、下記の画面が表示されますので、「了解」ボタンを押下し、
インスタンスを再起動して下さい。
「了解」ボタンを押下して下さい。ボタンを押下すると下記の画面が表示されます。
「閉じる」ボタンを押下すると、画面に下記のように表示されます。サーバ証明書が正常にインストール
されているか画面より確認して下さい。
上記までで、Web サーバのサーバ証明書のインストールが完了しました。しかしこの状態ではまだ、HTTPSの
通信ができません。そこで、HTTPSの通信ができるようにHTTPリスナーの設定を変更してみましょう。
「構成」→「対象の構成(sw-120)」を選択した後、「HTTPリスナー」タブを選択して下さい。
インスタンス中に存在する、HTTPのリスナー(http-listener-1)を選択して下さい。
HTTP リスナーを選択すると下記の画面が表示されます。ここで、「SSL」のタブを選択して下さい。
補足:
サーバ証明書の署名要求で設定した「サーバ名(cn)」と同一のサーバ名が下記で設定されていることを
確認して下さい。仮に署名要求で設定したサーバ名と、HTTPリスナー内のサーバ名が異なる場合は、
正常なサーバと認識されない為、サーバ名には御注意ください。
また、HTTPSのデフォルトのポート番号は443になります。443以外のポート番号が指定されている場合、
(デフォルトでは80等)はHTTPSの通信ができるように443に変更して「適用」ボタンを押下して先の手順に
進んでください。
「SSL」のタブを押下すると下記の画面に切り替わります。ここで、「SSL」のチェックボックスにチェックを付け
「適用」ボタンを押下して下さい。
「適用」ボタンを押下すると下記の画面が表示されます。「配備保留中」のリンクを押下して下さい。
「配備保留中」リンクを押下すると、下記の新規ウィンドウが表示されます。ここで、「配備」ボタンを
押下して下さい。
「配備」ボタンを押下すると下記の画面が表示されます。「インスタンスを再起動 今すぐ」にチェックを付け
「了解」ボタンを押下して下さい。
「了解」ボタンを押下した後、下記の画面が表示されます。「閉じる」ボタンを押下し、
完了して下さい。
次に、認証局(CA)の証明書をWeb サーバにインストールします。管理画面から「構成」→
「対象の構成(sw-120)」→「証明書」タブより「認証局」タブを押下して下さい。
すると下記の画面が表示されます。ここで「インストールボタン」を押下し認証局(CA)の証明書を
インストールする事ができます。
「インストール」ボタンを押下すると下記の画面が表示されます。トークンを選択し、「次へ」ボタンを
押下して下さい。
「次へ」ボタンを押下すると下記の画面が表示されます。この画面で認証局(CA)の証明書を貼付けます。
証明書を貼付けた後「次へ」ボタンを押下してください。
認証局(CA)の証明書の入手先ですが、OpenSSLのディレクトリ配下にcacert.pemというファイルがありますので、
こちらの「BEGIN CERTIFICATE」から「END CERTIFICATE」までをコピー&ペースとしてご利用ください。
> less /etc/sfw/openssl/cacert.pem <–このファイルの内容を表示
|
「次へ」ボタンを押下すると下記の画面が表示されます。ここでは認証局(CA)の証明書をインストールしていますので、
「CA 証明書」のラジオボタンにチェックを付け「次へ」ボタンを押下します。
「次へ」ボタンを押下すると下記の画面が表示されます。ここではインストールする認証局(CA)の証明書の確認を
行います。サブジェクトや発行者に記載されている内容を確認し「完了」ボタンを押下して下さい。
「完了」ボタンを押下すると下記の画面が表示されます。「閉じる」ボタンを押下しインストールウィザードを終了して下さい。
下記の画面では認証局(CA)の証明書が正しくインストールされているかを確認しています。インストールした認証局(CA)の
証明書は一覧の最後のエントリに記載されてますので、確認を行う際にはページを移動して確認を行ってください。
確認が終わった後、「配備保留中」のリンクを押下して下さい。
「配備」を行った後、インスタンスを再起動する必要がありますので、画面の内容に従い
インスタンスを再起動して下さい。
以上で、Web サーバに対するサーバ証明書のインストール作業は全て完了です。
この状態で、信頼されたHTTPS通信が可能なWeb サーバの構築が完了です。
次は、クライアントのブラウザからHTTPSの通信ができるかを確認してみましょう。
実際にクライアントのブラウザからアクセスする前に、ブラウザで1点だけ準備する事があります。
それは、認証局(CA)の証明書をブラウザにインストールしなければならない点です。
現在、Web サーバは自前のOpenSSLで構築した認証局(CA)で署名されたサーバ証明書を利用してHTTPSの
通信ができるように設定が完了していますが、クライアントのブラウザは自前で構築したOpenSSLの認証局(CA)
を信頼する設定にはなっておりません。そこで、OpenSSLの認証局(CA)で署名された全ての証明書を信頼する為に
クライアントのブラウザに対しても認証局(CA)の証明書をインストールする必要があります。
以下に、ブラウザに認証局(CA)の証明書のインストール手順を記載します。
ちなみに、下記はFirefoxを例にして記述しています。
Firefoxのメニューより、「環境設定」を選択して下さい。すると下記のような新規ウィンドウが表示されます。
この中で、「詳細」→「暗号化」タブを選択し、「証明書を表示」ボタンを押下して下さい。

「証明書を表示」ボタンを押下すると下記のような画面が表示されます。この中で「認証局証明書」タブを
選択し「インポート」ボタンを押下して下さい。

「インポート」ボタンを押下するとファイルダイアログが表示されますので、事前に認証局(CA)より
FTP等で入手しておいたcacert.pemを指定して「開く」ボタンを押下します。

ボタンを押下すると下記の画面が表示されますので、全てのチェックボックスにチェックを付け
「OK」ボタンを押下して認証局(CA)のインストールを完了します。

認証局(CA)の証明書が正しくインストールされているかを確認してみましょう。
下記のように、証明書名と発行者名中に独自で作成した証明書が表示されていれば問題ありません。
念のため、証明書を確認してみましょう。対象の署名書を選択し「表示」ボタンを押下してください。

「表示」ボタンを押下すると下記の画面が表示されます。この認証局(CA)の証明書では、
認証局で署名された、クライアント証明書やサーバ証明書、メール署名者の証明書、メール受信者の
証明書等を信頼できるようになっています。

以上で、クライアントであるブラウザ側の準備も完了しました。
それでは、実際にブラウザからWebサーバにHTTPSで通信を行ってみましょう。
警告画面等が表示されずに正常にHTTPSの通信ができたでしょうか?
ブラウザの鍵の絵の部分をダブルクリックすると「ページ情報」を表示する画面が表示されます。
内容を確認すると、このサイトへの接続は検証されており、信頼していますというメッセージが
表示されているかと思います。

以上で、OpenSSLを使用したセキュアなWebサーバの構築が完了です。
次回は、いよいよクライアント認証の設定方法について紹介します。
すいません、体裁が悪くて、これから外出で直前でアップしましたので、
体裁は後で綺麗にしなおします。
Entry filed under: SJS Web Server 7. Tags: クライアント認証, OpenSSL, Web Server.