CXF를 사용하여 서비스를 사용해야하고 다음과 같은 문제가 있습니다.Java Cant find 신뢰할 수있는 인증서 (JKS)
내 자바 키 저장소를했다하더라도 (JKS) workig 오 SOAP의 UI는, 예를 들어, 내 자바 프로그램에서 사용할 때 항상 나에게 내가 JKS 파일을 검사 한
sun.security.validator.ValidatorException: No trusted certificate found
메시지를주고 인증서가 거기에 있으므로 SOAPUI 프로젝트에 넣으면 문제가없는 것으로 인식되어 서비스가 성공적으로 호출됩니다. 나는 다음과 같이베이스로 CXF 웹 사이트 (http://svn.apache.org/viewvc/cxf/trunk/distribution/src/main/release/samples/wsdl_first_https/src/main/java/demo/hw_https/client/ClientNonSpring.java?view=log)에 의해 제공되는 코드를 사용하고 있습니다 :
public static void setupTLS(Object port) throws FileNotFoundException, IOException, GeneralSecurityException
{
final String keyStoreLoc = "d:/certs/mykeystore.jks";
HTTPConduit httpConduit = (HTTPConduit) ClientProxy.getClient(port).getConduit();
TLSClientParameters tlsCP = new TLSClientParameters();
final String keyPassword ="password";
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(new FileInputStream(keyStoreLoc), keyPassword.toCharArray());
KeyManager[] myKeyManagers = getKeyManagers(keyStore, keyPassword);
tlsCP.setKeyManagers(myKeyManagers);
KeyStore trustStore = KeyStore.getInstance("JKS");
trustStore.load(new FileInputStream(keyStoreLoc), keyPassword.toCharArray());
TrustManager[] myTrustStoreKeyManagers = getTrustManagers(trustStore);
tlsCP.setTrustManagers(myTrustStoreKeyManagers);
httpConduit.setTlsClientParameters(tlsCP);
}
private static TrustManager[] getTrustManagers(KeyStore trustStore)
throws NoSuchAlgorithmException, KeyStoreException
{
String alg = KeyManagerFactory.getDefaultAlgorithm();
TrustManagerFactory fac = TrustManagerFactory.getInstance(alg);
fac.init(trustStore);
return fac.getTrustManagers();
}
private static KeyManager[] getKeyManagers(KeyStore keyStore, String keyPassword)
throws GeneralSecurityException, IOException
{
String alg = KeyManagerFactory.getDefaultAlgorithm();
char[] keyPass = keyPassword != null ? keyPassword.toCharArray() : null;
KeyManagerFactory fac = KeyManagerFactory.getInstance(alg);
fac.init(keyStore, keyPass);
return fac.getKeyManagers();
}
디버깅, 내가 볼 수있는 경우 인증서 표시로드 및 키 스토어 및 keystrustmanagers는 일 후에 때문에, 그에 따라 채워지는 것을 무슨 일이 일어나고 있는지 알아 내려고, 나는 아이디어가 부족합니다. 그래서 도움을 줄 수있는 조언이 있다면 도와주세요.
미리 감사드립니다.
다음은 도움이되는 몇 가지 테스트입니다. https://git-wip-us.apache.org/repos/asf?p=cxf.git;a=blob;f=systests/transports/src/test/java /org/apache/cxf/systest/https/trust/TrustManagerTest.java;h=6264f447d87b7aad790ecec007ba69de43cab7c5;hb=HEAD –