1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.soap.security.wss4j;
18
19 import java.util.Properties;
20
21 import org.apache.ws.security.components.crypto.Crypto;
22 import org.w3c.dom.Document;
23
24 import org.springframework.ws.WebServiceMessage;
25 import org.springframework.ws.context.DefaultMessageContext;
26 import org.springframework.ws.context.MessageContext;
27 import org.springframework.ws.soap.SoapMessage;
28 import org.springframework.ws.soap.security.wss4j.support.CryptoFactoryBean;
29
30 public abstract class Wss4jMessageInterceptorSignTestCase extends Wss4jTestCase {
31
32 protected Wss4jSecurityInterceptor interceptor;
33
34 protected void onSetup() throws Exception {
35 interceptor = new Wss4jSecurityInterceptor();
36 interceptor.setValidationActions("Signature");
37
38 CryptoFactoryBean cryptoFactoryBean = new CryptoFactoryBean();
39 Properties cryptoFactoryBeanConfig = new Properties();
40 cryptoFactoryBeanConfig.setProperty("org.apache.ws.security.crypto.provider",
41 "org.apache.ws.security.components.crypto.Merlin");
42 cryptoFactoryBeanConfig.setProperty("org.apache.ws.security.crypto.merlin.keystore.type", "jceks");
43 cryptoFactoryBeanConfig.setProperty("org.apache.ws.security.crypto.merlin.keystore.password", "123456");
44
45
46 cryptoFactoryBeanConfig.setProperty("org.apache.ws.security.crypto.merlin.file", "private.jks");
47 cryptoFactoryBean.setConfiguration(cryptoFactoryBeanConfig);
48 cryptoFactoryBean.afterPropertiesSet();
49 interceptor.setValidationSignatureCrypto((Crypto) cryptoFactoryBean
50 .getObject());
51 interceptor.setSecurementSignatureCrypto((Crypto) cryptoFactoryBean
52 .getObject());
53 interceptor.afterPropertiesSet();
54
55 }
56
57 public void testValidateCertificate() throws Exception {
58 SoapMessage message = loadSoap11Message("signed-soap.xml");
59
60 MessageContext messageContext = new DefaultMessageContext(message, getSoap11MessageFactory());
61 interceptor.validateMessage(message, messageContext);
62 Object result = getMessage(message);
63 assertNotNull("No result returned", result);
64 assertXpathNotExists("Security Header not removed", "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security",
65 getDocument(message));
66 }
67
68 public void testValidateCertificateWithSignatureConfirmation() throws Exception {
69 SoapMessage message = loadSoap11Message("signed-soap.xml");
70 MessageContext messageContext = getSoap11MessageContext(message);
71 interceptor.setEnableSignatureConfirmation(true);
72 interceptor.validateMessage(message, messageContext);
73 WebServiceMessage response = messageContext.getResponse();
74 interceptor.secureMessage(message, messageContext);
75 assertNotNull("No result returned", response);
76 Document document = getDocument((SoapMessage) response);
77 assertXpathExists("Absent SignatureConfirmation element",
78 "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/wsse11:SignatureConfirmation", document);
79 }
80
81 public void testSignResponse() throws Exception {
82 interceptor.setSecurementActions("Signature");
83 interceptor.setEnableSignatureConfirmation(false);
84 interceptor.setSecurementPassword("123456");
85 interceptor.setSecurementUsername("rsaKey");
86 SoapMessage message = loadSoap11Message("empty-soap.xml");
87 MessageContext messageContext = getSoap11MessageContext(message);
88
89
90
91 interceptor.secureMessage(message, messageContext);
92
93 Document document = getDocument(message);
94 assertXpathExists("Absent SignatureConfirmation element",
95 "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/ds:Signature", document);
96
97
98 }
99
100 public void testSignResponseWithSignatureUser() throws Exception {
101 interceptor.setSecurementActions("Signature");
102 interceptor.setEnableSignatureConfirmation(false);
103 interceptor.setSecurementPassword("123456");
104 interceptor.setSecurementSignatureUser("rsaKey");
105 SoapMessage message = loadSoap11Message("empty-soap.xml");
106 MessageContext messageContext = getSoap11MessageContext(message);
107
108 interceptor.secureMessage(message, messageContext);
109
110 Document document = getDocument(message);
111 assertXpathExists("Absent SignatureConfirmation element",
112 "/SOAP-ENV:Envelope/SOAP-ENV:Header/wsse:Security/ds:Signature", document);
113
114
115 }
116 }