저는 Apache CXF를 사용하여 웹 서비스를 구축하고 있습니다. Apache WSS4J를 사용하여 WS-Security 기능을 제공합니다. SOAP 요청을해야하고 서명해야합니다.WSS4J가 콜백에서 키 저장소 비밀번호를로드하는 방법은 무엇입니까?
org.apache.ws.security.crypto.provider = org.apache.ws.security.components.crypto.Merlin
org.apache.ws.security.crypto.merlin.keystore.type = PKCS12
org.apache.ws.security.crypto.merlin.keystore.provider = BC
org.apache.ws.security.crypto.merlin.keystore.password = 12345678
org.apache.ws.security.crypto.merlin.keystore.alias = my-alias
org.apache.ws.security.crypto.merlin.keystore.file = my_certificate.p12
내가 내 암호가 일반 텍스트로 작성과 그 라인을 제거하려면 :
이
은 속성의 내용이 내가 WSS4J에 전달 파일입니다. 나는 그 라인을 제거하고 위의 코드처럼, 내 WSS4JOutInterceptor에 암호 콜백 핸들러를 제공 :public SoapInterceptor newSignerInterceptor() {
Map<String, Object> outProps = new HashMap<String, Object>();
outProps.put(WSHandlerConstants.ACTION, "Signature");
outProps.put(WSHandlerConstants.USER, config.getKeyAlias());
outProps.put(WSHandlerConstants.SIG_KEY_ID, "DirectReference");
outProps.put(WSHandlerConstants.USE_REQ_SIG_CERT, WSHandlerConstants.SIGNATURE_USER);
outProps.put(WSHandlerConstants.USE_SINGLE_CERTIFICATE, "false");
outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, this.getClass().getName());
outProps.put(WSHandlerConstants.SIG_PROP_FILE, config.getPropertiesFileName());
return new WSS4JOutInterceptor(outProps);
}
@Override
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
for (int i = 0; i < callbacks.length; i++) {
if (callbacks[i] instanceof WSPasswordCallback) {
((WSPasswordCallback) callbacks[i]).setPassword(password);
}
}
}
그러나 그것은 작동하지 않았다. 특성 파일에서 암호를 찾지 않고 기본 암호 인 "보안"을 사용합니다.
암호를 가져 오기 위해 콜백을 사용하는 방법은 무엇입니까?
public class PasswordCallbackHandler implements CallbackHandler {
@Override
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
for(Callback callBack:callbacks){
if(callBack instanceof WSPasswordCallback){
((WSPasswordCallback)callBack).setPassword("password");
}
}
}
}
다음 속성에 처리기를 추가 : 당신은 또한 핸들러의 기준을 설정하는 PW_CALLBACK_REF을 사용할 수 있습니다
outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, PasswordCallbackHandler.class);