13. 共通SSL設定

WebOTXではWebサーバとして、Webコンテナに内蔵されているJavaベースのWebサーバと、WebOTX Webサーバ、IIS、Apache などの外部Webサーバが利用できます。ここでは、Webコンテナに内蔵されているJavaベースのWebサーバ、WebOTX WebサーバでTLS/SSL(以降SSLとします)をプライベートCAを立てずに利用する方法について説明します。

ご参考:SSLアクセラレータ
SSLの暗号化・復号化処理をハードウェアで行い、Webサーバの負荷を軽減する方法があります。これを実現するのが「SSLアクセラレータ」です。SSLアクセラレータは、サーバの拡張スロットに差し込むボード、外付けの専用機、ルータやロードバランサなどのネットワーク機器に内蔵されているものなど、様々なタイプの製品があります。

13.1. Webコンテナ内蔵のWebサーバ(nio)を使う場合

MemoデフォルトのHTTP/1.1用リスナが該当します。

13.1.1. CA(認証局)を利用しない場合

WebOTX Webコンテナに内蔵されているWebサーバの内protocol種別が"nio"のリスナでSSLを利用する手順について説明します。ここでは、図1.15.1-1のようなファイル構成を仮定して説明します。単方向/双方向認証と実際に使用するファイル名は、動作させる環境に応じて置き換えてください。

16.1

単方向認証を行うためには、サーバのキーストアからサーバ証明書を取り出し、クライアント側のトラストストアへインポートします。 さらに双方向通信を行うためには、単方向通信の設定に加えて、クライアントのキーストアからクライアント証明書を取り出し、サーバ側のトラストストアへインポートします。

以上を設定するための手順として、J2SEのkeytoolコマンドとWebOTXの運用管理コマンド(otxadmin)を利用した場合について説明します。

caution
説明の中で例示しているコマンドが複数行になっていても、必ず1行で実行してください。
  1. サーバ鍵の作成

    J2SEのkeytoolコマンドを利用してサーバ用の鍵を作成します。下にコマンドの例を示します。<DOMAIN_ROOT>はサーバアプリケーションを配備するドメインのルートディレクトリです。ドメインにはじめから設定されているキーストア(keystore.jks)に鍵を追加します。keystore.jksのパスワードは「changeit」です。-dnameオプションのCN属性は必ずサーバのFQDNに一致させなければなりません

    > keytool -genkey -alias server -dname "CN=server_name, O=X, L=Y, C=XX, OU=YY, S=XY" -keyalg RSA -keypass changeit -storepass changeit -keystore <DOMAIN_ROOT>/config/keystore.jks

  2. サーバ証明書をエクスポート

    サーバの証明書をエクスポートします。

    > keytool -export -alias server -storepass changeit -file server.cer -keystore <DOMAIN_ROOT>/config/keystore.jks

  3. クライアント用キーストア、鍵の作成

    クライアント用のキーストア、鍵を作成します。

    > keytool -genkey -alias client -dname "CN=client_name, O=X, L=Y, C=XX, OU=YY, S=XY" -keyalg RSA -keypass changeit -storepass changeit -keystore client.jks

    双方向SSL(クライアント認証をするとき)には同様に別途キーストアをもう一つ作成します。例ではclientKey.jksとしています。

    > keytool -genkey -alias client -dname "CN=client_name, O=X, L=Y, C=XX, OU=YY, S=XY" -keyalg RSA -keypass changeit -storepass changeit -keystore clientKey.jks

  4. クライアントの証明書のエクスポート

    クライアントの証明書をエクスポートします。これは双方向認証(クライアント認証)をするときのみ必要な作業です。

    > keytool -export -alias client -storepass changeit -file client.cer -keystore clientKey.jks

  5. サーバの証明書をインポート(クライアント)

    クライアントのキーストアにサーバの証明書をインポートします。

    > keytool -import -trustcacerts -alias server -file server.cer -keystore client.jks -keypass changeit -storepass changeit

  6. クライアントの証明書をインポート(サーバ)

    サーバのキーストアにクライアントの証明書をインポートします。これは双方向SSL(クライアント認証をするとき)のみ必要な作業です。

    > keytool -import -trustcacerts -alias client -file client.cer -keystore <DOMAIN_ROOT>/config/keystore.jks -keypass changeit -storepass changeit

  7. SSL設定コマンドの実行

    運用管理コマンドを起動し、サーバアプリケーションを配備するドメインにログインします。続いて、HTTPSリスナのSSLのcertnameを変更します。certnameはSSLの認証に使うエイリアスを指定します。

    ドメインへのログインコマンド

    otxadmin> login --user admin --password adminadmin --port 6212

    コマンドはSSL構成により以下のどちらかを実行してください。

    (単方向SSLのとき)

    otxadmin> set server.network-config.protocols.protocol.https-protocol.ssl.cert-nickname=server

    (双方向SSLのとき)

    otxadmin> set server.network-config.protocols.protocol.https-protocol.ssl.cert-nickname=server
    otxadmin> set server.network-config.protocols.protocol.https-protocol.ssl.client-auth-enabled=true

  8. ドメインの再起動

    ドメインを再起動します。


  9. クライアントのキーストアを配置

    クライアント環境にクライアントのキーストアを配置します。


  10. クライアントアプリケーションへのコード追加

    クライアントアプリケーションがJavaアプリケーションの場合、次のコードを追加します。このコードはコンストラクタなどのインスタンス生成直後に実行される場所に追加し、必ずサーバアプリケーション呼び出し処理の前に実行されるようにします。javax.net.ssl.trustStoreキーの値はトラストストアのパスです。クライアントアプリケーションを実行するJava VMのユーザホームディレクトリからの相対パス、または絶対パスで指定します。ただし、クライアントアプリケーションをWebOTX上で動作させる場合は、javax.net.ssl.trustStoreキーを設定しないでください。javax.net.ssl.trustStoreキーとjavax.net.ssl.keyStoreキーの値は、クライアントのキーストアのパスになることに注意し、適宜変更してください。

    なお、System.setPropertyで設定している値は、Java VM 実行時引数に与えることでソースコードの変更を省略できます。また、セキュリティプロバイダ「com.sun.net.ssl.internal.ssl.Provider」はJ2SEの初期値で追加されているため、J2SEのjava.securityファイルの内容を変更していない場合、「java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());」を省略できます。

    (単方向SSLのとき)

    System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");
    System.setProperty("javax.net.ssl.trustStore", "keystore/client.jks");
    java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

    (双方向SSLのとき)

    System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");
    System.setProperty("javax.net.ssl.trustStore", "keystore/client.jks");
    System.setProperty("javax.net.ssl.keyStore", "keystore/clientKey.jks");
    System.setProperty("javax.net.ssl.keyStorePassword", " changeit");
    java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

  11. nec-ejb-jar.xmlの設定追加

    サーバアプリケーションがWebサービスで、EJBサービスエンドポイントの場合、nec-ejb-jar.xmlのwebservice-endpoint要素にtransport-guarantee要素を追加します。値はINTEGRALかCONFIDENTIALにします

    <webservice-endpoint>

    <transport-guarantee>INTEGRAL or CONFIDENTIAL</transport-guarantee>
    </webservice-endpoint>

  12. アクセスURL情報確認

    クライアントアプリケーション実行時に指定するURLを次のことに注意して変更します。

 

13.1.2. CA(認証局)を利用する場合

WebOTX Webコンテナに内蔵されているWebサーバの内protocol種別が"nio"のリスナでCA(認証局)を使用してSSLを利用する手順について説明します。ここでは、図1.15.1-2のようなファイル構成を仮定して説明します。単方向/双方向認証と実際に使用するファイル名は、動作させる環境に応じて置き換えてください。

16.1

単方向認証を行うためには、CA証明書をサーバ側のキーストアとクライアント側のトラストストアへインポートします。 さらに双方向通信を行うためには、単方向通信の設定に加えて、CA証明書をクライアント側のキーストアとサーバ側のトラストストアへインポートします。

以上を設定するための手順として、OpenSSLのca.plコマンドとJ2SEのkeytoolコマンドとWebOTXの運用管理コマンド(otxadmin)を利用した場合について説明します。

  1. サーバ鍵の作成

    CA(認証局)を利用しない場合の手順1.「サーバ鍵の作成」を実行します。


  2. サーバ証明書署名要求(CSR)の作成

    CAに送るためのサーバ証明書署名要求(CSR)を作成します。

    > keytool -certreq -alias server -keystore <DOMAIN_ROOT>/config/keystore.jks -file server_certreq.csr -storepass changeit

  3. プライベートCAを作成する(プライベートCAを利用する場合のみ)

    テスト用の証明書を作成する場合などで独自にCAを利用する場合に行います。 ここではOpenSSLに含まれるca.plを利用します。 任意のCAの情報を入力する必要があります。

    > ca.pl -newca
     Enter PEM pass phrase:
     Verifying - Enter PEM pass phrase:
    
    Country Name (2 letter code) [AU]:
    State or Province Name (full name) [Some-State]:
    Locality Name (eg, city) []:
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:
    Organizational Unit Name (eg, section) []:
    Common Name (e.g. server FQDN or YOUR name) []:
    Email Address []:
    A challenge password []:
    An optional company name []:
    

  4. プライベートCAでサーバ証明書を発行する(プライベートCAを利用する場合のみ)

    先に作成したプライベートCAを使ってテスト用の証明書を発行します。

    > openssl ca -policy policy_anything -keyfile demoCA\private\cakey.pem -cert demoCA\cacert.pem -in server_certreq.csr -out server_cert.csr

  5. CA証明書をキーストアにインポートする(サーバ)

    プライベートCAを作成した際の(demoCA\cacert.pem)または正式なCAから入手したCA証明書をキーストアにインポートします。

    > keytool -import -noprompt -trustcacerts -alias cacert -file demoCA\cacert.pem -keystore <DOMAIN_ROOT>/config/keystore.jks -storepass changeit

    cacert.pemの内容が"-----BEGIN CERTIFICATE-----"から始まっていない場合は、先頭から"-----BEGIN CERTIFICATE-----"までの余計な文字列を削除します。

    ↓↓↓削除↓↓↓
    Certificate:

    ↑↑↑削除↑↑↑
    -----BEGIN CERTIFICATE-----

    -----END CERTIFICATE-----

  6. サーバ証明書をキーストアにインポートする(サーバ)

    プライベートCAで発行したサーバ証明書または正式なCAから発行されたサーバ証明書をキーストアにインポートします。 alias名はインポートするキーストアで鍵を生成した際のalias名に合わせます

    > keytool -import -v -trustcacerts -alias server -file server_cert.csr -keystore <DOMAIN_ROOT>/config/keystore.jks -storepass changeit

    server_cert.csrの内容が"-----BEGIN CERTIFICATE-----"から始まっていない場合は、先頭から"-----BEGIN CERTIFICATE-----"までの余計な文字列を削除します。


  7. CA証明書をトラストストアにインポートする(クライアント)

    プライベートCAを作成した際の(demoCA\cacert.pem)または正式なCAから入手したCA証明書をクライアントのトラストストアにインポートします。

    > keytool -import -noprompt -trustcacerts -alias cacert -file demoCA\cacert.pem -keystore client.jks -storepass changeit

  8. クライアント鍵の作成

    ※これは双方向SSL(クライアント認証をするとき)のみ必要な作業です。

    クライアント用のキーストア、鍵を作成します。 例ではclientKey.jksとしています。

    > keytool -genkey -alias client -dname "CN=client_name, O=X, L=Y, C=XX, OU=YY, S=XY" -keyalg RSA -keypass changeit -storepass changeit -keystore clientKey.jks

  9. クライアント証明書署名要求(CSR)の作成

    ※これは双方向SSL(クライアント認証をするとき)のみ必要な作業です。

    CAに送るためのクライアント証明書署名要求(CSR)を作成します。

    > keytool -certreq -alias client -keystore clientKey.jks -file client_certreq.csr -storepass changeit

  10. プライベートCAでクライアント証明書を発行する(プライベートCAを利用する場合のみ)。

    ※これは双方向SSL(クライアント認証をするとき)のみ必要な作業です。

    先に作成したプライベートCAを使ってテスト用のクライアント証明書を発行します。

    > openssl ca -policy policy_anything -keyfile demoCA\private\cakey.pem -cert demoCA\cacert.pem -in client_certreq.csr -out client_cert.csr

  11. CA証明書をキーストアにインポートする(クライアント)。

    ※これは双方向SSL(クライアント認証をするとき)のみ必要な作業です。

    プライベートCAを作成した際の(demoCA\cacert.pem)または正式なCAから入手したCA証明書をクライアントのキーストアにインポートします。

    > keytool -import -noprompt -trustcacerts -alias cacert -file demoCA\cacert.pem -keystore clientKey.jks -storepass changeit

  12. クライアント証明書をインポートする(クライアント)。

    ※これは双方向SSL(クライアント認証をするとき)のみ必要な作業です。

    プライベートCAで発行したクライアント証明書または正式なCAから発行されたクライアント証明書をクライアントキーストアにインポートします。 alias名は、インポートするキーストアでクライアント鍵を生成した際のalias名に合わせます

    > keytool -import -v -trustcacerts -alias client -file client_cert.csr -keystore clientKey.jks -storepass changeit

    client_cert.csrの内容が"-----BEGIN CERTIFICATE-----"から始まっていない場合は、先頭から"-----BEGIN CERTIFICATE-----"までの余計な文字列を削除します。


  13. CA証明書をトラストストアにインポートする(サーバ)。

    ※これは双方向SSL(クライアント認証をするとき)のみ必要な作業です。

    プライベートCAを作成した際の(demoCA\cacert.pem)または正式なCAから入手したCA証明書をサーバトラストストアにインポートします。

    > keytool -import -noprompt -trustcacerts -alias cacert -file demoCA\cacert.pem -keystore <DOMAIN_ROOT>/config/cacerts.jks -storepass changeit

  14. SSL設定

    CA(認証局)を利用しない場合の手順7〜12を実行します。


13.2. Webコンテナ内蔵のWebサーバ(apr)を使う場合

MemoHTTP/2向けにnetwork-listenerのprotocolを"apr-http2-protocol"に変更したリスナ等が該当します。

WebOTX Webコンテナに内蔵されているWebサーバの内protocol種別が"apr"のリスナでSSLを利用する手順について説明します。ここでは、図のようなファイル構成を仮定して説明します。単方向/双方向認証と実際に使用するファイル名は、動作させる環境に応じて置き換えてください。

16.1

13.2.1. CA(認証局)を利用しない場合

protocolの種別がaprのリスナを利用する場合のサーバ証明書作成手順は以下を行ってください。
単方向認証の場合
[ WebOTX Webサーバを使う場合 > 単方向認証の場合の手順 > CA(認証局)を利用しない場合 > (1)〜(5)]

双方向認証の場合
[ WebOTX Webサーバを使う場合 > 双方向認証の場合の手順 > (1)〜(5)]

サーバ証明書作成後の証明書設定手順は以下のとおりです。

  1. SSL設定コマンドの実行

    運用管理コマンドを起動し、サーバアプリケーションを配備するドメインにログインします。続いて、HTTPSリスナにサーバ証明書関連ファイルのパスを設定します。

    ドメインへのログインコマンド

    otxadmin> login --user admin --password adminadmin --port 6212

    (単方向SSL、双方向SSL共通)

    (双方向SSLのときのみ)

    1. クライアント証明書ファイルの指定
      otxadmin> set  server.network-config.protocols.protocol.apr-http2-protocol.ssl.property.SSLHostConfig\.Certificate#caCertificateFile=・・・/client1.crt
    2. クライアント証明書を要求する指定
      otxadmin> set  server.network-config.protocols.protocol.apr-http2-protocol.ssl.property.SSLHostConfig#certificateVerification=required
  2. ドメインの再起動

    ドメインを再起動します。

  3. [ Webコンテナ内蔵のWebサーバ(NIO)を使う場合 > CA(認証局)を利用しない場合 > 手順の9〜12 ]を行ってください。

13.2.2. CA(認証局)を利用する場合

単方向認証を行うためには、CA証明書をサーバ側のサーバ証明書ファイル設定項目に指定しクライアント側のトラストストアへインポートします。 さらに双方向通信を行うためには、単方向通信の設定に加えて、CA証明書をクライアント側のキーストアにインポートしサーバ側のCA証明書設定項目に指定します。

サーバ証明書作成手順は以下を行ってください。
単方向認証の場合
[ WebOTX Webサーバを使う場合 > 単方向認証の場合の手順 > CA(認証局)を利用する場合 > ]

双方向認証の場合
[ WebOTX Webサーバを使う場合 > 双方向認証の場合の手順 > (1)〜(3)]

サーバ証明書作成後の証明書設定手順は以下のとおりです。

  1. SSL設定コマンドの実行

    運用管理コマンドを起動し、サーバアプリケーションを配備するドメインにログインします。続いて、HTTPSリスナにサーバ証明書関連ファイルのパスを設定します。

    ドメインへのログインコマンド

    otxadmin> login --user admin --password adminadmin --port 6212

    コマンドはSSL構成により以下のどちらかを実行してください。

    (単方向SSL、双方向SSL共通)

    (双方向SSLのときのみ)

    1. クライアント証明書ファイルの指定
      otxadmin> set  server.network-config.protocols.protocol.apr-http2-protocol.ssl.property.SSLHostConfig\.Certificate#caCertificateFile={クライアント証明書を署名した中間・ルート証明書ファイルまたはクライアント証明書ファイルのパス}
    2. クライアント証明書を要求する指定
      otxadmin> set  server.network-config.protocols.protocol.apr-http2-protocol.ssl.property.SSLHostConfig#certificateVerification=required
  2. ドメインの再起動

    ドメインを再起動します。

  3. [ Webコンテナ内蔵のWebサーバ(NIO)を使う場合 > CA(認証局)を利用しない場合 > 手順の9〜12 ]を行ってください。

13.3. WebOTX Webサーバを使う場合

WebOTX WebサーハでSSLを利用する手順を説明します。

16.2

13.3.1. 単方向認証の場合の手順

13.3.1.1. CA(認証局)を利用しない場合
(1) WebOTX WebサーバのSSL機能を有効にします。詳細については、「構築・運用> ドメインの構築 > Webサーバガイド > SSL(HTTPS通信) 設定方法」を参照してください。ここでは、otxadminコマンドを使った設定例を示します。

[コマンド例]
>otxadmin

otxadmin>login --user admin --password adminadmin --port 6212

otxadmin>set server.WebServer.security-enabled=true

caution
loginコマンドの--portオプションはSSLを有効にしたいWebサーバと連動しているドメインに割り当てられたポート番号を指定します。


(2) opensslコマンドを使ってサーバ側の秘密鍵を作成します。秘密鍵は一つのバーチャルサーバにつき一つ作成します。 opensslコマンドはWindows版の場合は${AS_INSTALL}/WebServer24/bin配下にあります。Unix版の場合はOTXSSLをインストールしている場合のみ/opt/share.nec/bin配下にあります。

[コマンド例]
>openssl genrsa -des3 2048 >vs1.key


(3) 秘密鍵から自己証明書を作成します。

[コマンド例]
>openssl req -new -x509 -days 365 -key vs1.key >vs1.crt

caution
コマンド実行後、いくつか聞かれる質問のうち「Common Name (eg, YOUR name)[]:」には、必ずバーチャルサーバのFQDNまたはIPアドレスを指定します。


(4) クライアントアプリケーションがJavaアプリケーションの場合、J2SE付属のkeytoolコマンドを使ってクライアント用のトラストストアを作成します。ただし、クライアントアプリケーションをWebOTX上で動作させる場合、およびクライアントアプリケーションをWebブラウザで動作させる場合、この作業は必要ありません。

[コマンド例]
>keytool -genkey -alias client -dname "CN=client_fqdn, O=NEC, L=TOKYO, C=JP, OU=X, S=XY" -keyalg RSA -keypass changeit -storepass changeit -keystore ClientTrustStore.jks

caution
-dnameオプションのCNにはクライアントのFQDNまたはIPアドレスを指定します。
caution
-keyalg、-keypass、-storepassで指定する値は適宜変更してください。
caution
-keystoreで指定している値は、図に沿ったものです。


(5) サーバの証明書をクライアントにインポートします。トラストストアにインポートする場合は、J2SE付属のkeytoolコマンドを使用します。コマンド実行後、「この証明書を信頼しますか?」という質問には「Y」と答えます。ただし、クライアントアプリケーションをWebOTX上で動作させる場合は、WebOTXのトラストストア(cacerts.jks)にインポートします。また、Webブラウザにインポートする場合は、Webブラウザの証明書インポート機能を使います。

[コマンド例:自作のトラストストアにインポートする場合]
>keytool -import -trustcacerts -alias server -file vs1.crt -keystore ClientTrustStore.jks -keypass changeit -storepass changeit

[コマンド例:WebOTXのトラストストアにインポートする場合]
>keytool -import -trustcacerts -alias server -file vs1.crt -keystore <Domain_ROOT>/config/cacerts.jks -keypass changeit -storepass changeit

caution
-keypass、-storepassで指定する値は適宜変更してください。
caution
自作のトラストストアにインポートする場合に-keystoreで指定している値は、図1.15.2-1に沿ったものです。
caution
<Domain_ROOT>は(1)でSSLを有効にしたWebサーバと連動しているドメインがインストールされたルートフォルダ(ルートディレクトリ)です。


(6) <Domain_ROOT>/config/WebServer/ssl.confをテキストエディタで開き、ServerNameパラメータの値にバーチャルサーバのFQDNまたはIPアドレスとポート番号を、SSLCertificateKeyFileパラメータの値にサーバの秘密鍵ファイルの絶対パスを、SSLCertificateFileパラメータの値にサーバの証明書の絶対パスを指定します。

[パラメータ設定例]
ServerName vs1.nec.com:443
SSLCertificateKeyFile "C:/key/vs1.key"
SSLCertificateFile "C:/crt/vs1.crt"

caution
これらのパラメータは、バーチャルサーバ一つにつき一つのみ設定できます。
一つのバーチャルサーバに対して複数設定しないように注意してください。
caution
<Domain_ROOT>は(1)でSSLを有効にしたWebサーバと連動しているドメインがインストールされたルートフォルダ(ルートディレクトリ)です。


(7) クライアントアプリケーションがJavaアプリケーションの場合、次のコードを追加します。このコードはコンストラクタなどのインスタンス生成直後に実行される場所に追加し、必ずサーバアプリケーション呼び出し処理の前に実行されるようにします。javax.net.ssl.trustStoreキーの値はトラストストアのパスてす。クライアントアプリケーションを実行するJava VMのユーザホームディレクトリからの相対パス、または絶対パスで指定します。ただし、クライアントアプリケーションをWebOTX上で動作させる場合は、javax.net.ssl.trustStoreキーを設定しないでください。
なお、System.setPropertyで設定している値は、Java VM 実行時引数に与えることでソースコードの変更を省略できます。また、セキュリティプロバイダ「com.sun.net.ssl.internal.ssl.Provider」はJ2SEの初期値で追加されているため、J2SEのjava.securityファイルの内容を変更していない場合、「java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());」を省略できます。

[コード例]
java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");
System.setProperty("javax.net.ssl.trustStore", "C:/keystore/ClientTrustStore.jks");

[コード例:WebOTX上で動作させる場合]
java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol")


(8) クライアントアプリケーション実行時に指定するURLを次のことに注意して変更します。
(9) (1)でSSLを有効にしたWebサーバと連動しているドメインを再起動します。

 

13.3.1.2. CA(認証局)を利用する場合
(1)WebOTX WebサーバのSSL機能を有効にします。詳細については、「構築・運用 > ドメインの構築 > Webサーバガイド > SSL(HTTPS通信) 設定方法」を参照してください。ここでは、otxadminコマンドを使った設定例を示します。
[コマンド例]
>otxadmin

otxadmin>login --user admin --password adminadmin --port 6212

otxadmin>set server.WebServer.security-enabled=true

caution
loginコマンドの--portオプションはSSLを有効にしたいWebサーバと連動しているドメインに割り当てられたポート番号を指定します。


(2)opensslコマンドを使用して、秘密鍵を生成します。ここで秘密鍵を保護するためのパスフレーズの入力を求められます。 opensslコマンドはWindows版の場合は${AS_INSTALL}/WebServer24/bin配下にあります。Unix版の場合はOTXSSLをインストールしている場合のみ/opt/share.nec/bin配下にあります。
[コマンド例]
>openssl genrsa -des3 2048 >vs1.key


(3)(2)で作成した秘密鍵からCSRを作成します。コマンド実行時に秘密鍵作成時に指定したパスフレーズを入力してください。続いてディスティングイッシュネームを入力してください。
[コマンド例]
>openssl req -new -key vs1.key > vs1.csr

caution
いくつか聞かれる質問のうち「Common Name (eg, YOUR name) []:」には、必ずバーチャルサーバのFQDNまたはIPアドレスを指定します。


(4)(3)で作成したCSRファイルをエディタで開き、
-----BEGIN CERTIFICATE REQUEST----- から
-----END CERTIFICATE REQUEST----- まで
の記載内容をCA局に送付します。


(5)CSRファイルをCA局に送付後、Secure Server CertificateがCA局から送付されます。送付された内容のうち、
-----BEGIN CERTIFICATE REQUEST----- から
-----END CERTIFICATE REQUEST----- まで
を任意のファイル名(例:vs1.crt)で保存します。


以降は、「CA(認証局)を利用しない場合」の(4)以降の手順を実施してください。

13.3.2. 双方向認証の場合の手順

(1) 単方向認証の場合の手順を行います。

(2) クライアントの自己証明書を作成します。ここではJ2SEのkeytoolコマンドを使用します。クライアントの秘密鍵を含んだキーストアを作成し、キーストアから自己証明書をエクスポートします。ただし、クライアントアプリケーションをWebOTX上で動作させる場合は、WebOTXのキーストア(keystore.jks)にキーペアを追加します。また、クライアントアプリケーションをWebブラウザで動作させる場合、ここで作成したキーストアをWebブラウザにインポートします。

[コマンド例]
>keytool -genkey -alias client1 -dname "CN=client_fqdn, O=NEC, L=TOKYO, C=JP, OU=X, S=XY" -keyalg RSA -keypass changeit -storepass changeit -keystore clientKeyStore.jks

> keytool -export -rfc -alias client1 -storepass changeit -file client1.crt -keystore clientKeystore.jks

[コマンド例:WebOTX上で動作させる場合]
>keytool -genkey -alias client1 -dname "CN=client_fqdn, O=NEC, L=TOKYO, C=JP, OU=X, S=XY" -keyalg RSA -keypass changeit -storepass changeit -keystore <Domain_ROOT>/config/keystore.jks

>keytool -export -rfc -alias client1 -storepass changeit -file client1.crt -keystore <Domain_ROOT>/config/keystore.jks

caution
-dnameオプションのCNにはクライアントのFQDNまたはIPアドレスを指定します。
caution
-keyalg、-keypass、-storepassで指定する値は適宜変更してください。
caution
キーストアを作成する場合、-keystoreで指定している値は、図1.15.2-1に沿ったものです。
caution
クライアントアプリケーションがJavaアプリケーションの場合、ここで作成したキーストアを使いますので、削除しないでください。
caution
WebOTXのキーストアは「<Domain_ROOT>/config/keystore.jks」です。
caution
keystore.jksのキーストアパスワードの初期値は「changeit」です。
caution
<Domain_ROOT>は(1)でSSLを有効にしたWebサーバと連動しているドメインがインストールされたルートフォルダ(ルートディレクトリ)です。
caution
クライアントアプリケーションをWebブラウザで動作させる場合、キーストアをpkcs#12形式にしないとインポートできないことが多いことに注意してください。キーストア作成の際に「-storetype」オプションを追加して「pkcs12」を指定すると、キーストアはpkcs#12形式になります。


(3) クライアントアプリケーションがJavaアプリケーションの場合、次のコードを追加します。このコードはコンストラクタなどのインスタンス生成直後に実行される場所に追加し、必ずサーバアプリケーション呼び出し処理の前に実行されるようにします。javax.net.ssl.keyStoreキーの値はキーストアのパスてす。クライアントアプリケーションを実行するJava VMのユーザホームディレクトリからの相対パス、または絶対パスで指定します。ただし、クライアントアプリケーションをWebOTX上で動作させる場合は、javax.net.ssl.keyStoreキーを設定しないでください。また、javax.net.ssl.keyStorePasswordキーの値はキーストアのパスワードに合わせて下さい。
なお、System.setPropertyで設定している値は、Java VM 実行時引数に与えることでソースコードの変更を省略できます。

[コード例]
System.setProperty("javax.net.ssl.keyStore", "C:/keystore/clientKeystore.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "changeit");

[コード例:WebOTX上で動作させる場合]
System.setProperty("javax.net.ssl.keyStorePassword", "changeit");

caution
WebOTXのキーストア「<Domain_ROOT>/config/keystore.jks」のキーストアパスワードの初期値は「changeit」です。
caution
<Domain_ROOT>は(1)でSSLを有効にしたWebサーバと連動しているドメインがインストールされたルートフォルダ(ルートディレクトリ)です。


(4) <Domain_ROOT>/config/WebServer/ssl.confをテキストエディタで開き、SSLCACertificateFileパラメータかSSLCACertificatePathパラメータのどちらか一つを変更してWebサーバにクライアントの証明書を認識させます。クライアントの証明書が一つのときはSSLCACertificateFileパラメータで証明書ファイルの絶対パスを指定します。クライアントの証明書が複数のときはSSLCACertificatePathパラメータで証明書を配置したフォルダ(ディレクトリ)を絶対パスで指定します。また、SSLVerifyClientパラメータの値を「require」に変更します。
なお、Webアプリケーション上でクライアント証明書を取得する場合には、SSLOptions パラメータに「+StdEnvVars +ExportCertData」を指定します。

[パラメータ設定例:クライアントの証明書が一つのとき]
SSLCACertificateFile "C:/crt/client1.crt"
SSLVerifyClient require
SSLOptions +StdEnvVars +ExportCertData

[パラメータ設定例:クライアントの証明書が複数のとき]
SSLCACertificatePath "C:/crts"
SSLVerifyClient require
SSLOptions +StdEnvVars +ExportCertData

caution
SSLCACertificateFileパラメータとSSLCACertificatePathパラメータは、バーチャルサーバ一つにつきどちらか一つのみ設定できます。両方同時に設定しないように注意してください。
caution
これらのパラメータは、バーチャルサーバ一つにつき一つのみ設定できます。一つのバーチャルサーバに対して複数設定しないように注意してください。


(5) (1)でSSLを有効にしたWebサーバと連動しているドメインを再起動します。