設定およびその他の一般的なアクティビティ
参照のため、この章では、Web サービスの保護に適用される共通のアクティビティについて説明します。これらのアクティビティは、以下の 3 つのカテゴリに分類されます。
設定タスクの実行
このドキュメントのほとんどのタスクでは、まず以下のタスクを実行する必要があります。
これらのタスクは、"Caché XML ツールの使用法" で説明されている一部のタスクの前提条件でもあります。
SSL/TLS 構成を作成する必要がある場合もあります。詳細は、"Caché セキュリティ管理ガイド" の “Caché での SSL/TLS の使用法” の章を参照してください。
Caché が使用するための信頼された証明書の用意
Caché は、信頼された証明書の独自のコレクションを使用して、着信 SOAP メッセージ (または、XML ドキュメント) のユーザ証明書とシグニチャを検証します。また、発信 SOAP メッセージのコンテンツを暗号化するときまたは XML ドキュメントを暗号化するときにもこれらの証明書を使用します。このコレクションは、この Caché インストールのすべてのネームスペースで使用できます。このコレクションを作成するには、以下の 2 つのファイルを作成し、それらをシステム・マネージャのディレクトリに配置します。
-
cache.cer — ルート証明書、つまり PEM エンコード形式の信頼された CA X.509 証明書を格納します。Caché で何らかの WS-Policy または WS-Security 機能を使用する場合は、このファイルが必要です。
-
cache.crl — PEM エンコード形式の X.509 証明書取り消しリストを格納します。このファイルはオプションです。
特定の Caché 資格情報セットに使用する追加のルート証明書を用意することができます。詳細は、後続のサブセクションを参照してください。
これらのファイルの作成に関する情報は、このドキュメントの対象ではありません。証明書の内容と証明書取り消しリストを規定する X.509 の詳細は、RFC5280 (http://www.rfc-archive.org/getrfc.php?rfc=5280Opens in a new tab) を参照してください。ファイル形式の一種である PEM エンコードの詳細は、RFC1421 (http://www.ietf.org/rfc/rfc1421.txtOpens in a new tab) を参照してください。
これらの証明書は他のすべての証明書の信頼の基礎になるので、実稼働環境で使用する証明書は必ず信頼できるソースから取得してください。
このコレクションは、SSL では使用されません。
Caché 資格情報セットの作成と編集
このセクションでは、X.509 証明書のコンテナである Caché 資格情報セットを作成し、編集する方法について説明します。これには、以下の 2 つの一般的なシナリオがあります。
-
証明書を所有している。この場合、秘密鍵も持っています。以下のときにこの証明書を使用します。
-
発信メッセージに署名するとき (秘密鍵ファイルもロードする場合)。
-
所持している公開鍵で暗号化されたメッセージを解読するとき。
-
-
証明書を所有していない。この場合、証明書の所有者から証明書を取得していますが、秘密鍵ファイルを持っていません。以下のときにこの証明書を使用します。
-
証明書の所有者に送信するメッセージを暗号化するとき。
-
証明書の所有者が作成したデジタル・シグニチャを検証するとき。
-
Caché 資格情報セットの作成
Caché 資格情報セットを作成する手順は以下のとおりです。
-
以下のファイルを取得します。
-
PEM でエンコードされた X.509 形式の個人の X.509 証明書
これは、所有している証明書または SOAP メッセージの交換相手のエンティティから取得した証明書のいずれかとなります。
-
(オプション) PEM でエンコードされた PKCS#1 形式の関連付けられている秘密鍵
これは、証明書を所有している場合にのみ適用されます。発信メッセージに署名しない場合、秘密鍵ファイルをロードする必要はありません。
-
(オプション) ルート証明書、つまりこの資格情報セットに使用する、PEM エンコード形式の信頼された CA X.509 証明書が含まれているファイル。
これらのファイルの作成に関する情報は、このドキュメントの対象ではありません。
-
-
管理ポータルで [システム管理]→[セキュリティ]→[X.509 証明書] を選択します。
-
[新規資格情報の作成] をクリックします。
-
以下の値を指定します。
-
[エイリアス] — この資格情報セットの識別に使用する文字列を指定します。これは一意にする必要があり、大文字と小文字は区別されます。このプロパティは必須です。
-
[X.509 証明書を含むファイル] — [参照] をクリックして、証明書ファイルに移動します。このプロパティは必須です。
-
[関連づけられた秘密鍵を含むファイル] — [参照] をクリックして、証明書ファイルに移動します。
-
[秘密鍵パスワード] および [秘密鍵パスワード(確認)] — 秘密鍵のパスワードを指定します。パスワードを指定しない場合は、資格情報セットを取得するときにパスワードを指定する必要があります。
これらのフィールドは、[関連づけられた秘密鍵を含むファイル] の値を指定した場合にのみ表示されます。
-
[信頼された証明書機関 X.509 証明書を含むファイル] — この資格情報セットにより信頼される CA の X.509 証明書のパスおよびファイル名。証明書は PEM 形式にする必要があります。このパスは、絶対パス、または管理者ディレクトリを基準とした相対パスで指定します。
例外として、この資格情報セットを使用する場合、Caché は、この章で前述のように、cache.cer ではなく、この信頼された証明書を使用します。この例外は、デジタル署名にメッセージ内のバイナリ・セキュリティ・トークンへの直接参照が含まれている場合です。この場合、メッセージに署名を検証するために必要な公開鍵が含まれているため、Caché はこの資格情報セットを検索しません。代わりに、Caché は cache.cer に含まれている信頼された証明書を使用します。
-
[許可されたユーザ] — この資格情報セットを使用できる Caché ユーザの、コンマ区切りのリストを指定します。このプロパティが NULL の場合、あらゆるユーザがこの資格情報セットを使用できます。
-
[Intended peer(s)] — この資格情報セットを使用できるシステムの DNS 名の、コンマ区切りのリストを指定します。この資格情報セットに対する相手の有効性は、ユーザのコードで資格情報オブジェクトの CheckPeerName() メソッドを使用して確認する必要があります。
-
-
[保存] をクリックします。
この操作によって、証明書ファイルと秘密鍵ファイル (存在する場合) の両方がデータベースにコピーされます。[信頼された証明書機関 X.509 証明書を含むファイル] を指定した場合、そのファイルはデータベースにコピーされません。
管理ポータルを使用するのではなく、%SYS.X509CredentialsOpens in a new tab クラスのメソッドを使用できます。以下はその例です。
Set credset=##class(%SYS.X509Credentials).%New()
Set credset.Alias="MyCred"
Do credset.LoadCertificate("c:\mycertbase64.cer")
Do credset.LoadPrivateKey("c:\mycertbase64.key")
Set sc=credset.Save()
If sc Do $system.Status.DisplayError(sc)
このデータにアクセスするために、標準の Cache オブジェクトと SQL メソッドは使用しないでください。Save() メソッドまたは Delete() メソッドの使用には、%Admin_Secure リソースが必要です。
詳細は、%SYS.X509CredentialsOpens in a new tab のクラス・リファレンスを参照してください。
Caché 資格情報セットの編集
作成した Caché 資格情報セットは次のように編集できます。
-
管理ポータルで [システム管理]→[セキュリティ]→[X.509 証明書] を選択します。
-
資格情報セットのテーブルでは、エイリアスの列にある値が識別子として機能します。編集する資格情報セットで [編集] をクリックします。
-
必要に応じて編集します。これらのフィールドの詳細は、前のセクションを参照してください。
-
[保存] をクリックすると、変更内容が保存されます。
資格情報セットのエイリアスと証明書はいずれも変更できません。資格情報に関連付けた秘密鍵の追加、変更、および削除も不可能です。このような変更を加えるには、新しい資格情報セットを作成します。
プログラムによる資格情報セットの取得
暗号化または署名を実行する際は、使用する証明書を指定する必要があります。そのためには、Caché 資格情報セットを選択します。
ウィザードを使用してポリシーを作成する場合、ウィザード内で資格情報セットを選択するか、または Web サービスあるいは Web クライアント内でプログラムによって資格情報セットを取得して使用できます。WS-Security ヘッダを手動で作成する場合は、資格情報セットをプログラムで取得して使用する必要があります。
参考のため、このセクションでは、以下の一般的なアクティビティについて説明します。
格納された資格情報セットの取得
%SYS.X509CredentialsOpens in a new tab のインスタンスを取得するには、GetByAlias() クラス・メソッドを呼び出します。このメソッドは、証明書およびその他の情報を格納している Caché 資格情報セットを返します。以下はその例です。
set credset=##class(%SYS.X509Credentials).GetByAlias(alias,password)
-
alias は、証明書のエイリアスです。
-
pwd は、秘密鍵パスワードです。これは、証明書を所有している場合にのみ適用されます。これは、関連付けられている秘密鍵が暗号化されていて、その秘密鍵のファイルをロードしたときにパスワードをロードしなかった場合にのみ必要です。
証明書を所有していない場合、いずれの形式でも秘密鍵にはアクセスできません。
パスワード引数を指定しない場合、%SYS.X509CredentialsOpens in a new tab インスタンスは秘密鍵にアクセスできないので、暗号化のみで使用できます。
このメソッドを実行するには、当該の資格情報セットの OwnerList に記載されたユーザとしてログインするか、OwnerList が NULL である必要があります。
暗号化に証明書を使用する場合、FindByField()、GetBySubjectKeyIdentifier()、GetByThumbprint() などのクラス・メソッドを使用して、Caché 資格情報セットを取得できます。%SYS.X509CredentialsOpens in a new tab については、クラス・ドキュメントを参照してください。GetByAlias() は、秘密鍵へのアクセスを提供する唯一のメソッドであるため、このクラスで署名用の証明書を取得する際に使用できる唯一のメソッドです。
着信メッセージからの証明書の取得
デジタル署名が行われた SOAP メッセージを受信する場合、%SYS.X509CredentialsOpens in a new tab のインスタンス内において関連付けられた証明書を使用できます。その証明書を取得できます。そのためには、以下の操作を実行します。
-
まず、Web サービスまたは Web クライアントの SecurityIn プロパティを使用して WS-Security ヘッダ要素にアクセスします。これにより %SOAP.Security.HeaderOpens in a new tab のインスタンスが返されます。
-
次のいずれかの操作を行います。
-
%SOAP.Security.HeaderOpens in a new tab インスタンスの中で、セキュリティ・ヘッダ要素の最初の <Signature> 要素を参照する Signature プロパティにアクセスします。
-
%SOAP.Security.HeaderOpens in a new tab インスタンスの FindElement() メソッドを使用して、%SOAP.Security.HeaderOpens in a new tab インスタンスの最初の <Signature> 要素にアクセスします。
どちらの場合も、デジタル・シグニチャを含む %XML.Security.SignatureOpens in a new tab のインスタンスが返されます。
-
-
シグニチャ・オブジェクトの X509Credentials プロパティにアクセスします。
-
返されたオブジェクトのタイプが %SYS.X509CredentialsOpens in a new tab のインスタンスかどうかを確認します。
if $zobjclass(credset)'="%SYS.X509Credentials" {set credset=""}
着信メッセージに署名済みの SAML アサーションが含まれている場合、X509Credentials プロパティは、他のクラスのインスタンスであるため、%SYS.X509CredentialsOpens in a new tab インスタンスへのアクセスには使用できません。
以下はその例です。
set credset=..SecurityIn.Signature.X509Credentials
if $zobjclass(credset)'="%SYS.X509Credentials" {set credset=""}
//if credset is not null, then use it...
クライアントで SSL/TLS 構成を使用するように指定する方法
Web サービスが HTTP over SSL/TLS (HTTPS) の使用を必要とする場合、Web クライアントは、適切な Caché SSL/TLS 構成を使用する必要があります。
ウィザードを使用してポリシーを作成する場合、ウィザード内で SSL/TLS 構成を選択するか、Web サービスまたは Web クライアント内で使用する構成をプログラムによって指定できます。WS-Security ヘッダを手動で作成する場合、使用する構成をプログラムで指定する必要があります。
使用する SSL/TLS 構成を指定するには、Web クライアントの SSLConfiguration プロパティを SSL/TLS 構成名に等しくなるように設定します。以下はその例です。
set client=##class(proxyclient.classname).%New()
set client.SSLConfiguration="mysslconfig"
//invoke web method of client
プロキシ・サーバ経由でクライアントを接続している場合は、Web クライアントで HttpProxySSLConnect プロパティを 1 に設定する必要もあります。