WebLogic:如何使用服务器x509证书签署soap请求

时间:2012-06-29 16:43:29

标签: java weblogic jax-ws x509certificate java-metro-framework

我正在尝试使用WebLogic 10.3.6库从独立的JAX-WS客户端调用Metro安全Web服务。 WS采用双向X.509策略进行保护。

我的WS期望我的SOAP请求被加密并使用服务器公钥进行签名。但是,在尝试WebLogic manual中的示例后,我发现JAX-WS客户端使用客户端私钥签署soap请求,并使用服务器公钥对它们进行加密。

  • 需要:加密&标志 - >服务器公钥
  • 当前:加密 - >服务器公钥;标志 - >客户私钥

如何配置独立客户端,以便它对SOAP请求进行必要的签名和加密?

下面粘贴的客户端代码和政策。谢谢,Bas

客户代码:

public class Main {
  public static void main(String[] args) {

    // Prepare request
    MyServiceService test = new MyServiceService();
    MyService port = test.getMyServicePort();

    // String constants to for server certificate, and client identity store
    String serverCertFile = "D:\\Development\\ws-config\\client_trust.der";
    String clientKeyStore = "D:\\Development\\ws-config\\client_store.jks";
    String clientKeyStorePass = "Leia";
    String clientKeyAlias = "trust";
    String clientKeyPass = "Leia";

    // Create list of credential providers
    List<CredentialProvider> credProviders = new ArrayList<CredentialProvider>();

    X509Certificate serverCertInit = null;
    CredentialProvider cp = null;
    try {
      // Create a credential provider with the client indentity and the server certificate
      serverCertInit = (X509Certificate) CertUtils.getCertificate(serverCertFile);
      serverCertInit.checkValidity();

      cp = new ClientBSTCredentialProvider(clientKeyStore, clientKeyStorePass, clientKeyAlias, clientKeyPass, "JKS", serverCertInit);
    } catch (Exception e) {
      e.printStackTrace();
      System.exit(1);
    }

    credProviders.add(cp);

    // Finally add the credential providers to the request context
    Map<String, Object> requestContext = ((BindingProvider) port).getRequestContext();
    requestContext.put(WSSecurityContext.CREDENTIAL_PROVIDER_LIST, credProviders);

    List certificate = CertUtils.getCertificate(clientKeyStore, clientKeyStorePass, clientKeyAlias, "JKS");

    final X509Certificate clientCert = (X509Certificate) certificate.get(0);
    final X509Certificate serverCert = serverCertInit;

    // Setup the TrustManager to verify the signature on the returned message
    requestContext.put(WSSecurityContext.TRUST_MANAGER, new TrustManager() {
      public boolean certificateCallback(X509Certificate[] chain, int validateErr) {
        // Check the server and client cert
        boolean validServer = chain[0].equals(serverCert);
        System.out.println("Server cert valid: " + validServer);
        boolean validClient = chain[0].equals(clientCert);
        System.out.println("Client cert valid: " + validClient);

        return validClient ^ validServer;
      }
    });

    // Invoke the service
    // port. ...
  }
}

WSDL政策:

<wsp:Policy wsu:Id="MyPortBindingPolicy">
    <wsp:ExactlyOne>
        <wsp:All>
            <wsam:Addressing wsp:Optional="false" />
            <sp:SymmetricBinding>
                <wsp:Policy>
                    <sp:ProtectionToken>
                        <wsp:Policy>
                            <sp:SecureConversationToken sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
                                <wsp:Policy>
                                    <sp:RequireDerivedKeys />
                                    <sp:BootstrapPolicy>
                                        <wsp:Policy>
                                            <sp:AsymmetricBinding>
                                                <wsp:Policy>
                                                    <sp:InitiatorToken>
                                                        <wsp:Policy>
                                                            <sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
                                                                <wsp:Policy>
                                                                    <sp:WssX509V3Token10 />
                                                                    <sp:RequireIssuerSerialReference />
                                                                    <sp:RequireDerivedKeys />
                                                                </wsp:Policy>
                                                            </sp:X509Token>
                                                        </wsp:Policy>
                                                    </sp:InitiatorToken>
                                                    <sp:RecipientToken>
                                                        <wsp:Policy>
                                                            <sp:X509Token sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/Never">
                                                                <wsp:Policy>
                                                                    <sp:WssX509V3Token10 />
                                                                    <sp:RequireIssuerSerialReference />
                                                                    <sp:RequireDerivedKeys />
                                                                </wsp:Policy>
                                                            </sp:X509Token>
                                                        </wsp:Policy>
                                                    </sp:RecipientToken>
                                                    <sp:Layout>
                                                        <wsp:Policy>
                                                            <sp:Strict />
                                                        </wsp:Policy>
                                                    </sp:Layout>
                                                    <sp:IncludeTimestamp />
                                                    <sp:OnlySignEntireHeadersAndBody />
                                                    <sp:AlgorithmSuite>
                                                        <wsp:Policy>
                                                            <sp:Basic256 />
                                                        </wsp:Policy>
                                                    </sp:AlgorithmSuite>
                                                </wsp:Policy>
                                            </sp:AsymmetricBinding>
                                            <sp:Wss10>
                                                <wsp:Policy>
                                                    <sp:MustSupportRefIssuerSerial />
                                                </wsp:Policy>
                                            </sp:Wss10>
                                            <sp:EncryptedParts>
                                                <sp:Body />
                                            </sp:EncryptedParts>
                                            <sp:SignedParts>
                                                <sp:Body />
                                                <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
                                                <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
                                                <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
                                                <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
                                                <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
                                                <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
                                                <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
                                                <sp:Header Name="AckRequested" Namespace="http://docs.oasis-open.org/ws-rx/wsrmp/200702" />
                                                <sp:Header Name="SequenceAcknowledgement" Namespace="http://docs.oasis-open.org/ws-rx/wsrmp/200702" />
                                                <sp:Header Name="Sequence" Namespace="http://docs.oasis-open.org/ws-rx/wsrmp/200702" />
                                                <sp:Header Name="CreateSequence" Namespace="http://docs.oasis-open.org/ws-rx/wsrmp/200702" />
                                            </sp:SignedParts>
                                        </wsp:Policy>
                                    </sp:BootstrapPolicy>
                                </wsp:Policy>
                            </sp:SecureConversationToken>
                        </wsp:Policy>
                    </sp:ProtectionToken>
                    <sp:Layout>
                        <wsp:Policy>
                            <sp:Strict />
                        </wsp:Policy>
                    </sp:Layout>
                    <sp:AlgorithmSuite>
                        <wsp:Policy>
                            <sp:Basic256 />
                        </wsp:Policy>
                    </sp:AlgorithmSuite>
                    <sp:IncludeTimestamp />
                    <sp:OnlySignEntireHeadersAndBody />
                </wsp:Policy>
            </sp:SymmetricBinding>
            <sp:Wss11>
                <wsp:Policy>
                    <sp:MustSupportRefIssuerSerial />
                    <sp:MustSupportRefThumbprint />
                    <sp:MustSupportRefEncryptedKey />
                </wsp:Policy>
            </sp:Wss11>
            <sp:Trust13>
                <wsp:Policy>
                    <sp:RequireClientEntropy />
                    <sp:RequireServerEntropy />
                    <sp:MustSupportIssuedTokens />
                </wsp:Policy>
            </sp:Trust13>
            <tcp:OptimizedTCPTransport enabled="true" />
        </wsp:All>
    </wsp:ExactlyOne>
</wsp:Policy>
<wsp:Policy wsu:Id="SecureInputMessagePolicy">
    <wsp:ExactlyOne>
        <wsp:All>
            <sp:EncryptedParts>
                <sp:Body />
            </sp:EncryptedParts>
            <sp:SignedParts>
                <sp:Body />
                <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
                <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
                <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
                <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
                <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
                <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
                <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
                <sp:Header Name="AckRequested" Namespace="http://docs.oasis-open.org/ws-rx/wsrmp/200702" />
                <sp:Header Name="SequenceAcknowledgement" Namespace="http://docs.oasis-open.org/ws-rx/wsrmp/200702" />
                <sp:Header Name="Sequence" Namespace="http://docs.oasis-open.org/ws-rx/wsrmp/200702" />
                <sp:Header Name="CreateSequence" Namespace="http://docs.oasis-open.org/ws-rx/wsrmp/200702" />
            </sp:SignedParts>
        </wsp:All>
    </wsp:ExactlyOne>
</wsp:Policy>
<wsp:Policy wsu:Id="SecureOutputMessagePolicy">
    <wsp:ExactlyOne>
        <wsp:All>
            <sp:EncryptedParts>
                <sp:Body />
            </sp:EncryptedParts>
            <sp:SignedParts>
                <sp:Body />
                <sp:Header Name="To" Namespace="http://www.w3.org/2005/08/addressing" />
                <sp:Header Name="From" Namespace="http://www.w3.org/2005/08/addressing" />
                <sp:Header Name="FaultTo" Namespace="http://www.w3.org/2005/08/addressing" />
                <sp:Header Name="ReplyTo" Namespace="http://www.w3.org/2005/08/addressing" />
                <sp:Header Name="MessageID" Namespace="http://www.w3.org/2005/08/addressing" />
                <sp:Header Name="RelatesTo" Namespace="http://www.w3.org/2005/08/addressing" />
                <sp:Header Name="Action" Namespace="http://www.w3.org/2005/08/addressing" />
                <sp:Header Name="AckRequested" Namespace="http://docs.oasis-open.org/ws-rx/wsrmp/200702" />
                <sp:Header Name="SequenceAcknowledgement" Namespace="http://docs.oasis-open.org/ws-rx/wsrmp/200702" />
                <sp:Header Name="Sequence" Namespace="http://docs.oasis-open.org/ws-rx/wsrmp/200702" />
                <sp:Header Name="CreateSequence" Namespace="http://docs.oasis-open.org/ws-rx/wsrmp/200702" />
            </sp:SignedParts>
        </wsp:All>
    </wsp:ExactlyOne>
</wsp:Policy>

0 个答案:

没有答案