wso2 / phpを使用してWebサービスを作成しているときに、1か所で立ち往生しています。安全なmtomを使いたい。暗号化または署名のいずれかを使用しているときに、セキュリティトークンで使用するクライアントの公開証明書を知るにはどうすればよいですか?または、現在のすべてのクライアント公開証明書と照合する必要がありますか?
現在のユーザーが誰であるかを知る必要があります。サービスは顧客固有であるため。助けてください...その緊急:)
よろしくCharanjeetKaur
wso2 / phpを使用してWebサービスを作成しているときに、1か所で立ち往生しています。安全なmtomを使いたい。暗号化または署名のいずれかを使用しているときに、セキュリティトークンで使用するクライアントの公開証明書を知るにはどうすればよいですか?または、現在のすべてのクライアント公開証明書と照合する必要がありますか?
現在のユーザーが誰であるかを知る必要があります。サービスは顧客固有であるため。助けてください...その緊急:)
よろしくCharanjeetKaur
少し遅れていることは承知していますが、同じ質問に出くわしました。どういうわけか、これは紛らわしいトピックです(おそらく正確なドキュメントが不足しているためです)。(ポリシーファイルを使用する代わりに)コードでサービスを構成する場合、非常に制限されます。これが私が見つけたものです:
クライアントがメッセージに署名するだけの場合、クライアントは自分の証明書をセキュリティトークン(wsse:binarysecuritytoken)としてヘッダーに添付します。サーバーはその証明書を受け取り、それを使用して署名をチェックします。したがって、以下を指定する必要があります。
クライアント内:クライアント証明書と秘密鍵。
サービス内:サービス証明書と秘密鍵(ヘッダーからクライアント証明書を取得します)。
クライアントがメッセージに署名して暗号化すると、クライアントはサーバー証明書を使用して暗号化し、サーバーが署名を確認して暗号化して戻すことができるように証明書を送信します。ここで、サービスはヘッダーの証明書を使用して応答を暗号化します。したがって、指定する必要があるのは次のとおりです。
クライアント内:クライアント証明書と秘密鍵、およびサーバー証明書。
サーバー内:サーバー証明書と秘密鍵(ヘッダーからクライアント証明書を取得します)。
クライアントがメッセージのみを暗号化する場合、クライアントは要求で証明書を送信しないため、サービスでクライアント証明書を指定する必要があります。
クライアント内:クライアント証明書と秘密鍵、およびサーバー証明書。
サーバー内:サーバー証明書と秘密鍵およびクライアント証明書。
したがって、最初のケースでは、クライアントの証明書を指定する必要はありません。ユーザーを認証する必要がある場合は、要求ヘッダーから証明書を取得してさらに処理を行うことができます(事前共有証明書と照合する場合があります)。最後のケースでは、回避策を見つけることができませんでした(xmlポリシーを使用している可能性があります)。
phpで証明書を取得するには、名前空間(ハードワイヤード)コードを処理する必要があります(応答関数内):
$xml = simplexml_load_string($inMessage->outputHeaders[3]->str, NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/");
$ss= $xml->children("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")
->BinarySecurityToken;
警告!!outputHeaders [3]は、セキュリティヘッダーを取得するための安全な方法ではありません!! クライアント証明書を取得する簡単な方法を示すだけです。