Payara Serverの管理タスクで最も多いものの1つは、他のWebサーバーと同様に、HTTPプロトコルやPayara Serverへのリモート・アクセスをセキュアにするための電子証明書のセットアップです。自己署名証明書または信頼できる認証機関の署名入り証明書のいずれかをお持ちでしょうが、どちらの場合も証明書をPayara Serverのドメインに追加してセキュアな通信に用いるのはとても簡単です。
 
もし新しい自己署名証明書を作成してこのガイドをお読みになるのであれば、opensslを用いてコマンド1つで証明書を作成することができます。
 
openssl req - x509 - newkey rsa: 4096  - keyout mycert. key  - out mycert. crt  - days 365 
  
 
新しい電子証明書を用いてPayara Server をセキュアな構成にする手順はいくつかの段階を踏むことになりますが、大まかには以下のようになります。
公開鍵と秘密鍵を単一のPKCS12ファイルに格納する 
格納した公開鍵と秘密鍵をPayara Serverのドメインが使用しているキーストアに追加する 
証明書の公開鍵をPayara Serverのドメインの信頼する証明書に追加する – これはオプションですが、強くお勧めします 
必要に応じて、HTTPリスナーのセキュリティを有効にする 
必要に応じて管理インタフェースのセキュリティを有効にする 
 
このガイドを読み進めるにあたって必要なものは以下の通りです。
証明書ファイル(公開鍵) – ここではmycert.crt とします(自己署名証明書・認証局の署名入り証明書ともに) 
証明書の秘密鍵 – ここではmycert.key とします 
あるいは、mycert.crtとmycert.keyの代わりに、公開鍵と秘密鍵のバンドル 
Payara Serverのインストール – ここではmydomain ドメインを使用するものとします(デフォルト・ドメインdomain1 、もう一つの組み込みドメインpayaradomain 、または新たに作成したドメイン) 
 
個別の公開鍵と秘密鍵のファイルの代わりに、鍵が既にバンドルされているかもしれません。これは信頼できる認証機関で署名された証明書でしばしばみられます。もしPKCS12形式以外でバンドルされている場合には、いくつかの手順で異なるタイプのストアを認識させるか、または鍵をPKCS12形式にエクスポートする必要があります。
 
このガイドの目的に照らし合わせると、証明書が自己署名証明書か認証局の署名入りのものであるかは重要ではありません。これらの違いは証明書の取得方法だけです。認証局を考慮する必要がない場合、例えば、すべての通信がプライベートでファイアウォールの内側の場合、自己署名証明書を用いれば十分です。しかし、CA証明書を使用してHTTPS接続を外部向けに有効化することは、信頼性を高め偽造を防止する手段として有用です。
 
準備 
キーストアを操作するには、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バンドル・ファイルはドメインのマスター・パスワードと同じパスワードで暗号化しなければならないことに注意してください。バンドルは後でPayara Serverがアクセスするキーストアに追加されますが、キーストアを開いてそこに含まれるすべてのバンドルを復号化する際にドメインのマスター・パスワードが使用されます。
 keytoolコマンドはPKCS12バンドルの作成をサポートしないため、他の方法を採らなければなりません。その手順はご利用のオペレーティング・システムによって異なります。
 
Creation of the PKCS12 bundle in Linux 
 
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に似ています。
Keytoolを使用すると、新しいバンドルの内容を確認することもできます。
 
keytool - list - keystore mycert. p12 
  
   
Windows で PKCS12 バンドルを作成する 
 
mycert.crtとmycert.keyからバンドルを作成する最も簡単な方法は、Linux同様にopenssl MakeCert 
 
もし信頼された認証機関の署名入り証明書をお持ちであれば、一旦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による操作方法についてご説明しました。皆様のセキュリティ要件を満たす最適な手段を決める一助となれば幸いです。
 
{{cta(‘2701aff7-585c-4b76-b77f-32ee1b11c47a’)}}