Payara Server の管理タスクで最も多いものの 1 つは、他の Web サーバーと同様に、 HTTP プロトコルや Payara Server へのリモート・アクセスをセキュアにするための電子証明書のセットアップです。皆様は自己署名証明書または信頼できる認証局の署名入り証明書のいずれかをお持ちでしょうが、どちらの場合も証明書を Payara Server のドメインに追加してセキュアな通信に用いるのはとても簡単です。 
{{cta(‘c11b699a-704e-4144-8f8a-6d473cb091c6’)}} 
このガイドでご説明する手順の概要 
新しい電子証明書を用いて Payara Server をセキュアな構成にする手順はいくつかの段階を踏むことになりますが、大まかには以下のようになります。 
  SSL 証明書の取得   公開鍵と秘密鍵を単一の PKCS12 ファイルに格納する   格納した公開鍵と秘密鍵を Payara Server のドメインが使用しているキーストアに追加する   証明書の公開鍵を Payara Server のドメインの信頼する証明書に追加する  –  これはオプションですが、強くお勧めします   必要に応じて、 HTTP リスナーのセキュリティを有効にする   必要に応じて管理インタフェースのセキュリティを有効にする  
このガイドを読み進めるにあたって必要なものは以下の通りです。 
  証明書ファイル ( 公開鍵 ) –  ここでは crt とします ( 自己署名証明書・認証局の署名入り証明書ともに )   証明書の秘密鍵  –  ここでは key とします   Payara Server のインストール  –  ここでは mydomain ドメインを使用するものとします ( デフォルト・ドメイン domain1 、もう一つの組み込みドメイン payaradomain 、または新たに作成したドメイン )  
SSL 証明書の取得 
ほとんどの場合、認証局 (CA) が作成し署名した SSL 証明書を使用することになります。多くの場合、証明書署名要求 (CSR) を作成して認証局に送り、認証局から SSL 証明書を取得します。 Payara Server Enterprise には、 CSR を生成する generate-csr コマンドが用意されており、非常に簡単に CSR を生成することができます。また、 openssl または certreq を使用して CSR を生成することもできます。 
新しい自己署名証明書を使ってこのガイドに従う場合は、 Payara Server Enterprise を使って直接作成するか、 openssl などのサードパーティのツールを使って作成することができます。 
Payara Server Enterprise は、 generate-self-signed-certificate コマンドにより、ドメイン構成の中で自己署名証明書を生成することができます。このコマンドを使用すると、 Payara Server の外部で証明書を生成し、ドメインにインポートするために必要なすべての手順を省略することができます。 Payara Server Enterprise を使用して自己署名証明書を生成するには、以下の asadmin コマンドを使用します。 
asadmin generate- self- signed- certificate -- dn "C=UK,O=Payara,CN=payara.fish"  mydomain_certificate
  
 
生成された証明書は、 Payara のキーストアとトラスト・ストアに、 mydomain_certificate というエイリアスで自動的に保存されます。つまり、秘密鍵と公開鍵を束ねて Payara のキーストアとトラスト・ストアにインポートする必要はなく、この証明書エイリアスを使用するように Payara Server を構成することができるのす。 
また、 openssl を使って自己署名の秘密鍵と公開鍵を生成することもできます。 
openssl req - x509 - newkey rsa: 4096  - keyout mycert. key  - out mycert. crt  - days 365 
  
{{cta(’36fcb98d-5eaa-4cd1-a6d2-b9c1087d487d’)}} 信頼できる認証局から証明書を取得した場合、鍵はすでにバンドルされている可能性があります。これは、信頼できる認証局によって署名された証明書の場合によく見られます。バンドルの形式が PKCS12 と異なる場合は、一部の操作で別のストア形式を指定するか、 PKCS12 形式の鍵をエクスポートする必要があります。 
このガイドでは、証明書が自己署名されているか、認証局によって署名されているかは重要ではありません。両者の違いは、証明書の取得方法だけです。認証が問題にならない場合、例えば、すべての通信がプライベートでファイアウォールの内側にある場合は、自己署名証明書の使用で十分です。しかし、外部から利用可能な HTTPS 接続のために CA 証明書を取得して使用することは、信頼性を高め、偽造されるのを防ぐために役立ちます。 
準備 
キーストアを操作するには、 JDK の bin ディレクトリにある keytool コマンドを使用します。 
すべての構成変更はドメインの config フォルダ内で行われます。手順を簡単にするため、証明書の公開鍵と秘密鍵のファイルをこのフォルダにコピーすることから始めましょう。 mycert.cer および mycert.key を <Payara_install>/glassfish/domains/mydomain/config  にコピーしてください。もし公開鍵と秘密鍵のバンドルを持っているのであれば、それを config ディレクトリにコピーします。ここではファイル名を mycert.p12 とします。 
これらの手順を実行する前に、 Payara Server のドメインを停止させることをお勧めします。いくつかのアクションではドメインを開始する必要がありますが、このガイドでは適宜明示します。 
ドメイン・マスター・パスワードの変更 
証明書キーストアにアクセスする前に、 Payara Server のドメインのマスター・パスワードを確実に設定しておく必要があります。このパスワードは Payara Server がキーストアにアクセスするために使用されます。後ほど、キーストアに同じパスワードでアクセスする必要があります。 
デフォルトのマスター・パスワードは changeit です。以下のコマンドでこれを変更することができます。 
asadmin change- master- password -- savemasterpassword= true  mydomain
  
 
このコマンドを実行すると新しいマスター・パスワードを尋ねてきます。このパスワードはキーストア・ファイルの暗号化・復号化と含まれるキー・バンドルの復号化にも使用するため、忘れないようにしてください。 –savemasterpassword=true   を使用することで、   asadmin start-domain   コマンドがパスワード入力プロンプトを出さないように、パスワードをディスクに保存することができます。パスワードを保存したくなければ、このオプションは省略してください。 
証明書の公開鍵・秘密鍵のキーストアへの追加 
HTTP リスナーのような内部向けの接続をセキュアにするには、証明書鍵をドメインの設定フォルダ内にあるキーストア・ファイル keystore.jsk に追加する必要があります。それを行う前に、公開鍵と秘密鍵を PKCS12 バンドル・ファイルにまとめておく必要があります。ここで、 PKCS12 バンドル・ファイルはドメインのマスター・パスワードと同じパスワード で暗号化しなければならないことに注意してください。また、証明書の秘密鍵( mycert.key )が同じパスワード で暗号化されていることを確認してください。バンドルは後で Payara Server がアクセスするキーストアに追加されますが、キーストアを開いてそこに含まれるすべてのバンドルを復号化する際にドメインのマスター・パスワードが使用されます。 
keytool コマンドは PKCS12 バンドルの作成をサポートしないため、他の方法を採らなければなりません。その手順はご利用のオペレーティング・システムによって異なります。 
Linux による PKCS12 バンドルの作成 
Linux では、以下のように openssl を使用してバンドルを作成します。 
openssl pkcs12 - export - in mycert. crt  - inkey mycert. key  - out mycert. p12  - name mydomain_certificate
  
 
公開鍵のパスを  -in  オプション、秘密鍵のパスを  -inkey  オプション、作成するバンドルのファイル名を  -out  オプションでそれぞれ指定します。また、 -name  オプションを用いてバンドルにエイリアスを設定する必要があります。 
バンドルを作成する際に新しいパスワードを尋ねられます。バンドルは基本的には新しいキーストアで、 cacerts.jks と keystore.jks に似ています。パスワードは、 Payara ドメインで使用しているマスター・パスワードと同じものを使用してください。 
Keytool を使用すると、新しいバンドルの内容を確認することもできます。 
keytool - list - keystore mycert. p12 
  
 
Windows による PKCS12 バンドルの作成 
mycert.crt と mycert.key からバンドルを作成する最も簡単な方法は、 Linux 同様に openssl を使用するか、あるいはいくつかの類似したツール  ( 例えば MakeCert を使用することです。しかし、これらは Windows には標準では含まれていません。 
もし信頼された認証局の署名入り証明書をお持ちであれば、一旦 Windows の証明書ストアにインポートしてから、 PKCS12 形式でエクスポートします。この作業はすべて Microsoft 管理コンソール  (mmc)  で行います。署名された証明書バンドルは秘密鍵のエクスポートが可能でなければなりません。そうでなければ、バンドルのままで使用することになるでしょう。もし PKCS12 形式でなければ、後からいくつかのコマンドを用いて PKCS12 の代わりの正しい形式を指定する必要があります。 
バンドルをエクスポートする際には、「はい、秘密キーをエクスポートします」 (export the private key) 、「証明のパスにある証明書を可能であればすべて含む」 (Include all certificates in the certification path if possible) 、「すべての拡張プロパティをエクスポートする」 (Export all extended properties) の各オプションをすべてチェックすることを忘れないでください。 
このガイドの他の箇所に合わせて、エクスポートしたバンドルを mycert.p12 というファイル名で保存します。 
Microsoft 管理コンソールは証明書にエイリアスを手動で設定する方法がありません。エイリアスを生成すると、残念なことにこのようなものになります : {fa2ds2d3-z13b-492d-2c83-f5z215432p2k}  このエイリアスは後ほどこのガイドで mydomain_certificate というエイリアスを使用する箇所で必要になります。 
PKCS12 バンドルをキーストアにインポートする 
先の手順では公開鍵と秘密鍵から新しいキーストア・バンドルを作成しました。新しいバンドルの内容は keytool を使用して確認できます。 
keytool - list - keystore mycert. p12 
  
 
このコマンドはまずバンドル作成時のパスワードを尋ねてきます。それから証明書の情報と設定されたエイリアスを一覧表示します。エイリアスは重要で、後ほど証明書を参照する際に必要となります。 
最後に、 PKCS12 バンドルを Payara Server のドメインのキーストアにインポートする必要があります。以下の keytool コマンドを実行してください。 
keytool - importkeystore - destkeystore keystore. jks  - srckeystore mycert. p12  - srcstoretype PKCS12 - alias mydomain_certificate
  
 
上記のコマンドでは、 keystore.jks に他のキーストア  ( バンドル )  である mycert.p12 (PKCS12 形式 )  をインポートするため、 mydomain_certificate エイリアスを持つ証明書だけを選択したキーストアからそれを行います。 
証明書の信頼する証明書一覧への追加 
この手順では、証明書の公開鍵または PKCS バンドル全体を Payara Server のドメインにある信頼された証明書のキーストア・ファイルに追加してみます。これは外部または他の Payara Server インスタンスから取得した証明書をサーバーに信頼できるものとして認識させるものです。 HTTP リスナーのような内部チャネルのセキュア化だけが目的であれば、この手順はオプションですが、どのような場合でもこの手順に従って問題は発生しないでしょう。 
信頼された証明書のキーストア・ファイルはデフォルトで次の場所にあります。 mydomain/config/cacerts.jks .
以下のコマンドで公開鍵ファイル  (mycert.crt)  を cacerts.jks キーストアにインポートします。 
keytool - importcert - trustcacerts - destkeystore cacerts. jks  - file mycert. crt  - alias mydomain_certificate
  
 
このコマンドは cacerts.jks キーストアのパスワードを尋ねてきます。これはドメインのマスター・パスワードと同一になります。 
PKCS バンドル  (mycert.p12)  の場合は、同様に以下のコマンドを使用します。 
keytool - importkeystore - destkeystore cacerts. jks  - srckeystore mycert. p12  - srcstoretype PKCS12 - alias mydomain_certificate
  
 
これで証明書は mydomain_certificate エイリアス以下にインストールできます。 
  古い証明書の置き換え 
既にドメインへ証明書をインストールしていて、期限切れが近づいているためにこれを置き換えたい場合には、それを新しいものに置き換えることができます。そのためのドメインに対する追加設定は不要です。新しい証明書をインストールする前に、まず古い証明書を削除します。そのための keytool コマンドを以下に示します。 
keytool - delete - alias mydomain_certificate - keystore keystore. jks 
  
 
信頼された証明書のキーストアにある証明書も置き換える場合には、同じコマンドを cacerts.jsk ファイルに対しても使用します。 
keytool - delete - alias mydomain_certificate - keystore cacerts. jks   
 
古い証明書を削除してから、新しい証明書を先に示したように追加します。ここで注意していただきたいことは、証明書はドメイン構成からはエイリアスで参照されるということです。つまり、新しい証明書のエイリアスも古い証明書と同一でなければなりません。 
セキュア管理で使用している証明書を置き換えたい場合には、 ( 既にセキュア管理が有効な場合でも )  セキュア管理を有効するコマンドを実行して、すべてのセキュア管理設定をリフレッシュすることをお勧めします。 
asadmin start- domain mydomain ( if  domain not yet started) 
asadmin enable- secure- admin
asadmin restart- domain mydomain ( to apply changes) 
  
 
{{cta(‘4c7626f5-1e53-418e-90c8-add6e4af19c9′,’justifycenter’)}} 
HTTP リスナーのセキュリティ有効化 
この時点で証明書はドメインで使用できます。 HTTP リスナーをセキュアにするか、デフォルトでセキュアになっている http-listener-2 リスナーのデフォルト証明書を置き換えれば良いのです。 
まず、対象となるドメインでサーバーを起動する必要があります。 
サーバーが動作している間、 asadmin または Web ブラウザの管理コンソールを使用して HTTP リスナーを構成することができます。 
管理コンソールを用いた HTTP リスナーのセキュア化 
ブラウザで管理コンソールを開きます。デフォルトでは URL は   http://localhost:4848/ となります。 
構成したいリスナーが my-http-listener であれば、 Configurations -> server-config -> HTTP Service -> HTTP Listeners > my-http-listener  と辿ります。デフォルトでは既に TLS プロトコルでセキュア化された http-listener-2 が存在しており、デフォルト証明書はエイリアス s1as を持ち、ポート 8181 をリスンします。 
セキュアでないリスナーにセキュリティを追加する場合には、以下のように Security が Enabled になっていることを確認してください。 
SSL タブでは、 TLS は有効になっているはずです。 SSL3 を使用することはお勧めしません。 SSL3 は TLS に取って代わられており、広くは使われていません。さらに、 SSL3 プロトコルには セキュリティ上の問題 があります。 
SSL タブでは、新しい証明書を適用することもできます。 Certificate NickName には証明書のエイリアスを設定します。今回のケースでは mydomain_certificate となります。 
  
もし証明書のエイリアスが分からない場合は、以下のコマンドを用いて mycert.p12 バンドルからエイリアスを探してください。 
 
  
keytool - list - keystore mycert. p12 
  
  
同じコマンドを keystore.jks ファイルに対して実行すると、同じ証明書だけでなくドメインのキーストアに既に存在している他の証明書についても見ることができます  (2 つの証明書 : glassfish-instance  および  s1as  がデフォルトで存在しています ) 。 
最後に、構成の変更を Web ブラウザで確認します。 Web アプリケーションがコンテキスト・ルート  webapp  にデプロイされていて、リスナーがポート 8181 を使用している場合、アドレス  https://localhost:8181/webapp  または  https://<yourdomain>:8181/webapp  を開いて、新しい証明書によって接続がセキュアになっていることをチェックしてください。 
Asadmin を用いた HTTP リスナーのセキュア化 
asadmin では、構成手順を 1 つまたは複数の asadmin CLI コマンドで再現できます。その際にはドット区切りの構成プロパティを用います。 
  http-litener-2 という名前のリスナーでセキュリティを有効にします。  
 
asadmin set configs. config . server - config. network - config. protocols . protocol . http - listener- 2 . security - enabled= true   
  http-listener-2 リスナーで TLS プロトコルを有効にします。  
asadmin set configs. config . server - config. network - config. protocols . protocol . http - listener- 2 . ssl . tls - enabled= true 
asadmin set configs. config . server - config. network - config. protocols . protocol . http - listener- 2 . ssl . tls11 - enabled= true 
asadmin set configs. config . server - config. network - config. protocols . protocol . http - listener- 2 . ssl . tls12 - enabled= true 
  
  
TLS プロトコルには 3 つのバージョンがあります。望ましい方法は 3 バージョンすべてを有効にして古いクライアントに対しても最適のバージョンが使用されるようにすることです。しかし、 TLS 1.2 のみを有効にすることも可能で、その場合は上記の最後のコマンドのみを実行します。管理コンソール使用時にはこのような粒度の調整はできません。 
  エイリアス mydomain_certificate を持つ新しい証明書を http-listener-2 に適用します。  
 
asadmin set configs. config . server - config. network - config. protocols . protocol . http - listener- 2 . ssl . cert - nickname= mydomain_certificate
  
  
管理リスナーのセキュリティ有効化 
管理コンソールへの接続も他の HTTP リスナーの場合と同様にセキュア化することができます。ただし、管理コンソールまたは asadmin をリモートで実行し、ドメイン名が証明書のそれと一致している場合のみ、管理リスナーの SSL セキュリティを有効にすることをお勧めします。併せて、 SSL はクラスタにおいてインスタンスとドメイン管理サーバーの通信にも使用されることに留意してください。 
もし、管理リスナーのセキュア化が本当に必要な場合には、以下の例外を除いて管理コンソールで他の HTTP リスナーと同じ手順を実施します。 
  管理リスナーのセキュリティを有効化する前に、すべての管理ユーザーのパスワードを空でないものにします。 
  管理ユーザーのパスワードが空の場合、管理コンソールでパスワードを変更する (Domain -> Administrator password)  か、または以下の asadmin コマンドを実行します。  
 
 
asadmin change- admin- password
  
  
  管理リスナーのセキュリティを有効化するには、 Secure Administration  ページの Enable secure admin ボタンをクリックします。これは admin-listener の General 構成ページの Security チェックボックスのページへのリンクです。これは管理コンソールのメニュー : server (Admin server) -> General -> Secure Administration   を辿る場合と同様です。 
  Secure Administration ページから証明書を管理リスナーに設定することができます。 Administration Alias フィールドを  s1as  から証明書のエイリアスに置き換えるか、後で通常の HTTP リスナーと同じ方法で証明書を設定します。後者の方法では、証明書を設定するまでデフォルト証明書を用いることを意味します。   Enable secure admin をクリックした後について補足すると、サーバーの再起動後に HTTPS プロトコル上で動作する管理コンソールにリダイレクトされます。ドメインに他のインスタンスが存在する場合には、それらも同様に再起動する必要があります。  
 
管理セキュリティを有効にする前の状態です。 
 
 
管理セキュリティを有効化した後です。 
繰り返しになりますが、セキュアな管理リスナーは asadmin コマンドを使用しても有効化することができます : 
asadmin enable- secure- admin -- adminalias= mydomain_certificate
  
 
このコマンドを実行後、サーバーを再起動する必要があります。ドメインの他のインスタンスについても同様です。 
さらに細かな構成が必要な場合は、他の HTTP リスナーと同様の asadmin コマンドを使用する必要があります。 
まとめ 
以上で、 Payara Server に証明書を追加する方法と、それを使用して SSL によるセキュアな通信を使用する方法についてご理解いただけたのではないかと思います。決して難しくはありませんが、 openssl 、 keytool 、管理コンソールを使用したいくつかの手順は必要となります。今回は、すべての必須またはオプションとなる手順、異なるオペレーティング・システムのための代替案、管理コンソールまたは asadmin による操作方法についてご説明しました。皆様のセキュリティ要件を満たす最適な手段を決める一助となれば幸いです。 
Payara Platform の本番利用でヘルプは必要ですか ? Payara Enterprise  について知ってください。 
{{cta(‘2701aff7-585c-4b76-b77f-32ee1b11c47a’,’justifycenter’)}}