Наше приложение Spring Integration работает в Websphere.Это клиент для внешней службы SSL.
Я импортировал сертификат, используя Retrive из порта [в хранилище доверия по умолчанию], предоставив хост и порт 443.Включена трассировка в WebSphere, и похоже, что он ищет файл cacert, а не trust.p12.
[18-2-19 13:44:59:154 CET] 00000063 SystemOut O 2019-02-18 13:44:59.153 INFO 30426 --- [ver.startup : 0] pertySourcedRequestMappingHandlerMapping : Mapped URL path [/v2/api-docs] onto method [public org.springframework.http.ResponseEntity<springfox.documentation.spring.web.json.Json> springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)]
[18-2-19 13:44:59:826 CET] 00000063 SystemOut O keyStore is: /srv/opt/IBM/WebSphere/AppServer/java/8.0/jre/lib/security/cacerts
Код:
public class PreemptiveMessageSender extends HttpComponentsMessageSender {
@Autowired
private Environment env;
private String host;
private String userId;
private String password;
public PreemptiveMessageSender() {
super();
}
public PreemptiveMessageSender(HttpClient httpClient) {
super(httpClient);
}
@Override
protected HttpContext createContext(URI uri) {
HttpHost targetHost = new HttpHost(host, 443, "https");
String decryptedPassword = getDecryptedPassword();
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials(userId, decryptedPassword));
AuthCache authCache = new BasicAuthCache();
authCache.put(targetHost, new BasicScheme());
// Add AuthCache to the execution context
final HttpClientContext context = HttpClientContext.create();
context.setCredentialsProvider(credsProvider);
context.setAuthCache(authCache);
return context;
}
private String getDecryptedPassword() {
BasicTextEncryptor textEncrypt = new BasicTextEncryptor();
textEncrypt.setPassword(env.getProperty("KEY_PASSWORD"));
return textEncrypt.decrypt(password);
}
@Override
public WebServiceConnection createConnection(URI uri) throws IOException {
HttpPost httpPost = new HttpPost(uri);
if (isAcceptGzipEncoding()) {
httpPost.addHeader(HttpTransportConstants.HEADER_ACCEPT_ENCODING,
HttpTransportConstants.CONTENT_ENCODING_GZIP);
}
HttpContext httpContext = createContext(uri);
return new CustomHttpComponentsConnection(getHttpClient(), httpPost, httpContext);
}
...
}
Ошибка :
«исключение»: «org.springframework.ws.client.WebServiceIOException», «message»: «Ошибка ввода-вывода: com.ibm.jsse2.util.h: путь PKIXсбой здания: java.security.cert.CertPathBuilderException: PKIXCertPathBuilderImpl не удалось создать действительный CertPath; внутренняя причина: \ n \ tjava.security.cert.CertPathValidatorException: сертификат, выданный CN = ODC Test Root CA - G1, O =Тест ODC, C = TU не является доверенным, внутренняя причина: \ n \ tjava.security.cert.CertPathValidatorException: ошибка цепочки сертификата; вложенное исключение - javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.h:Ошибка построения пути PKIX: java.security.cert.CertPathBuilderException: PKIXCertPathBuilderImpl не удалось создать действительный CertPath; внутренняя причина: \ n \ tjava.security.cert.CertPathValidatorException: сертификат, выданный CN = ODC Test Root CA - G1, O = ODC Test, C = TU не является доверенным;внутренняя причина: \ n \ tjava.security.cert.CertPathValidatorException: ошибка цепочки сертификата ",
Вопрос : связана ли эта проблема с интеграцией Spring с использованием java cacert? Какзаставить его использовать хранилище доверия WebSphere?