2016-02-09 3 views
1

У меня есть рабочее соединение с мылом, но мой сертификат завершается. поэтому я хочу изменить сертификат. для моего соединения с мылом. Я использую хранилище ключей, которое я генерирую с помощью openssl.WSSecurityException: токен безопасности не может быть аутентифицирован или авторизован

с моим старым хранилищем ключей он отлично работает. но с моим новым я получаю эту StackTrace:

Caused by: org.apache.ws.security.WSSecurityException: The security token could not be authenticated or authorized 
at org.apache.ws.security.validate.SignatureTrustValidator.validate(SignatureTrustValidator.java:86) 
at org.apache.ws.security.processor.SignatureProcessor.handleToken(SignatureProcessor.java:187) 
at org.apache.ws.security.WSSecurityEngine.processSecurityHeader(WSSecurityEngine.java:396) 
at org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessage(WSS4JInInterceptor.java:270) 
at org.apache.cxf.ws.security.wss4j.PolicyBasedWSS4JInInterceptor.handleMessage(PolicyBasedWSS4JInInterceptor.java:120) 
at org.apache.cxf.ws.security.wss4j.PolicyBasedWSS4JInInterceptor.handleMessage(PolicyBasedWSS4JInInterceptor.java:105) 
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272) 
at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:835) 
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1612) 
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1503) 
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1310) 
at org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputStream.java:50) 
at org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:223) 
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) 
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:628) 
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) 
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272) 
at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:565) 
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:474) 
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:377) 
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:330) 
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96) 
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:135) 

поэтому я думаю, есть что-то не так с моим поколением хранилища ключей. хотя я могу отправить сообщение, и он пойдет не так с получением. это код, и на последней строке я получаю вышеупомянутое освобождение.

AanleverServiceV12_Service service = new AanleverServiceV12_Service(); 
     log.trace("aanleverService created"); 
     AanleverServiceV12 aanleverServicePort = service.getAanleverServicePortV12(); 
     log.trace("aanleverServicePort created"); 
     AanleverRequest aanleverRequest = createAanleverRequest(belastingFormulier); 
     log.trace("AanleverRequest: {}", aanleverRequest); 
     AanleverResponse response = aanleverServicePort.aanleveren(aanleverRequest); 

это мой конфигурационный файл:

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.password=**** 
org.apache.ws.security.crypto.merlin.keystore.file=keystore.p12 
org.apache.ws.security.crypto.merlin.keystore.alias={csr_request_finished} 

любая помощь будет приветствоваться!

Я попытался воссоздать хранилище ключей, которое работает, но я получаю ту же ошибку. поэтому я думаю, что ошибка заключается в создании хранилища ключей.

я это сделать:

openssl pkcs12 -export -out keystore.p12 -inkey server.key -in cert.pem -name "{csr_request_finished}" 

я обновил мое поколение к этому, но с той же ошибкой (я разделить сертификат в моей собственной, и подтверждающую сертификаты:

openssl pkcs12 -export -out kdeb5.p12 -inkey key.pem -in cert.pem -name "{csr_request_finished}" -certfile certRest.pem 
+0

вы также должны конфиг для любого XML (заголовок) или БД, которая хранит информацию. Если вы создали – logger

+0

, спасибо. Я попытался снова создать старое хранилище ключей и получить ту же ошибку. так почему-то я не создаю права на хранилище ключей. – tibi

ответ

1

хорошо его нашли. кажется, что когда нет дружественного имени, это будет ошибка:

org.apache.ws.security.WSSecurityException: The security token could not be authenticated or authorized 

так, чтобы избежать по меньшей мере, один сертификат требуется имя может быть даже пуста, как это:

openssl pkcs12 -export -out keystore.p12 -inkey key.pem -in cert.pem -name "{CSR_Request_Finished}" -certfile certRest.pem -caname "" 

выше работ, но лучше всего с курса сделать:

openssl pkcs12 -export -out keystore.p12 -inkey key.pem -in cert.pem -name "{CSR_Request_Finished}" -certfile certRest.pem -caname "cert one" -caname "cert intermediate" -caname "cert root"  etc.... 

разн это без каких-либо CaName данного вы это :

Bag Attributes: <No Attributes> 

с именем, которое вы пуста получите это:

Bag Attributes 
friendlyName: 

вы можете просматривать эту информацию с помощью этой команды:

openssl pkcs12 -info -in keystore.p12