48

既存の Web サービスにリクエストを送信しようとしています。この Web サービスは、私によって管理されていません。この Web サービスのセキュリティ ポリシーでは、SOAP 要求で完全な証明書チェーンを送信する必要があります。私の証明書チェーンには 3 つの証明書が含まれています。証明書チェーンの有効性をテストすることができる (そしてテストした) ため、証明書チェーンのセットアップに問題はありません。

このセットアップ (= 要求で完全な証明書チェーンを送信する) のセキュリティ構成は次のとおりです。

<xwss:Sign id="signature">
   <xwss:X509Token 
        certificateAlias="alias" 
        keyReferenceType="Direct"
        valueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509PKIPathv1" />
</xwss:Sign>

Spring-WSを通じてこれを達成しようとしています。Spring-WS は、セキュリティーに spring-ws-security を使用します。Spring-ws-security は xws-security に委譲します。

    <dependency>
        <groupId>org.springframework.ws</groupId>
        <artifactId>spring-ws-security</artifactId>
        <version>2.1.0.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.ws.security</groupId>
                <artifactId>wss4j</artifactId>
            </exclusion>            
            <exclusion>
                <groupId>com.sun.xml.wsit</groupId>
                <artifactId>xws-security</artifactId>
            </exclusion>            
        </exclusions>
     </dependency>

Xws-security には 2 つのフレーバーがあります。

    <dependency>
        <groupId>com.sun.xml.wsit</groupId>
        <artifactId>xws-security</artifactId>
        <version>1.3.1</version>
    </dependency>

    <dependency>
        <groupId>com.sun.xml.wss</groupId>
        <artifactId>xws-security</artifactId>
        <version>3.0</version>
    </dependency>

最初のものは、Spring WS Security によって使用されます。2つ目はレガシーです。

xws-security での XWSS 構成の適用は、BinarySecurityToken というクラスで行われます。BinarySecurityToken には、というフィールドがあります。

valueType

valueType の JavaDoc は、X509PKIPathv1 (とりわけ) をサポートしていると述べています。ただし、このセッターが述べているように、そうではありません。

    protected void setValueType(String valueType) {
    if (!(MessageConstants.X509v3_NS.equals(valueType)||MessageConstants.X509v1_NS.equals(valueType))) { 
        log.log(Level.SEVERE,"WSS0342.valtype.invalid");
        throw new RuntimeException("Unsupported value type: " + valueType);
    }
    this.valueType = valueType;
}

クラス MessageConstants には、X509PKIPathv1 の static が (も) ありません。コードを実行すると、期待どおりの結果が得られます。

Unsupported value type: http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509PKIPathv1

レガシーのソースコードを見ることができましたcom.sun.xml.wss.xws-security:3.0。私の努力にもかかわらず、 のソース コードは見つかりませんでしたcom.sun.xml.wsit.xws-security-1.3.1。ただし、コードは同じだと思います。私は両方のライブラリを試しましたが、どちらも同じ例外を与えました。デフォルトの spring-ws-security を使用し、両方のライブラリに明示的な依存関係宣言を使用して (一度に 1 つずつ) 試してみました。

私の質問:

  1. X509PKIPathv1 の valueType と Direct の keyReferenceType で X509 署名を生成するために xws-security を使用できた人はいますか?
  2. これを提供する他の xws-security 実装は存在しますか? それとも、Wss4j のようなまったく異なるアプローチを検討する必要がありますか?

私は BinarySecurityToken を書き直すことを検討しましたが、それはおそらく DSIG の SignatureProcessor の X509 署名も書き直すことを意味します。

4

3 に答える 3