更新时间:2022-10-29 12:17:57
我发现问关于我的问题:在MainAsync:
HttpsTransportSE androidHttpTransport =新HttpsTransportSE(10.0.2.2,8181,?/服务器/ WSDL,10000);
((HttpsServiceConnectionSE) androidHttpTransport.getServiceConnection()).setSSLSocketFactory(trustAllHosts().getSocketFactory());
受保护的SSLContext trustAllHosts()
{
返回allowAllSSL();
}
公众的SSLContext allowAllSSL(){
的SSL连接上下文= NULL;
的TrustManager [] trustManagers = NULL;
的KeyManagerFactory mgrFact;
尝试{
的TrustManagerFactory TMF = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
mgrFact = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
密钥库的keyStore = KeyStore.getInstance(PKCS12);
InputStream的时间= cntx.getResources()openRawResource(R.raw.keystore)。
尝试 {
keyStore.load(在密码.toCharArray());
mgrFact.init(密钥库密码.toCharArray());
}赶上(CertificateException E){
// TODO自动生成的catch块
e.printStackTrace();
} 最后 {
附寄();
}
tmf.init(的keyStore);
HttpsURLConnection.setDefaultHostnameVerifier(新的HostnameVerifier()
{
@覆盖
公共布尔验证(字符串主机名,的SSLSession会话){
返回true;
}
});
如果(trustManagers == NULL){
trustManagers =新的TrustManager [] {新FakeX509TrustManager()};
}
最后的TrustManager [] trustAllCerts =新的TrustManager [] {新X509TrustManager(){
公共x509证书[] getAcceptedIssuers(){
的System.out.println(getAcceptedIssuers);
返回null;
}
公共无效checkServerTrusted(x509证书[]链,字符串的authType)
抛出CertificateException {
的System.out.println(Сведенияосертификате:+连锁[0] .getIssuerX500Principal()的getName()+\ñТипавторизации:+的authType);
}
公共无效checkClientTrusted(x509证书[]链,字符串的authType)
抛出CertificateException {
的System.out.println(checkClientTrusted:+的authType);
}
}};
//tmf.getTrustManagers()
尝试 {
上下文= SSLContext.getInstance(TLS);
context.init(mgrFact.getKeyManagers(),trustAllCerts,新的SecureRandom());
}赶上(抛出:NoSuchAlgorithmException E){
e.printStackTrace();
}赶上(KeyManagementException E){
e.printStackTrace();
}
HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(新的HostnameVerifier(){
公共布尔验证(字符串主机名,的SSLSession会话){
返回true;
}
});
}赶上(例外前)
{
Log.e(TAG,allowAllSSL失败:+ ex.toString());
}
返回范围内;
}
I tried connect to my JAX-WS service over SSL. Without SSL all works.
Method in AsyncTask:
HttpsTransportSE androidHttpTransport = new HttpsTransportSE("10.0.2.2", 8181, "/Server/?wsdl", 10000);
((HttpsServiceConnectionSE) androidHttpTransport.getServiceConnection()).setSSLSocketFactory(trustAllHosts()
.getSocketFactory());
//androidHttpTransport.debug=true;
androidHttpTransport.call(getSoapAction(method), envelope);
Get SSLContext
public SSLContext allowAllSSL() {
SSLContext context = null;
TrustManager[] trustManagers = null;
try{
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
KeyStore keyStore = KeyStore.getInstance("pkcs12");
InputStream in = cntx.getResources().openRawResource(R.raw.client_keystore);
try {
keyStore.load(in, "password".toCharArray());
} catch (CertificateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
in.close();
}
tmf.init(keyStore);
if (trustManagers == null) {
trustManagers = new TrustManager[] { new FakeX509TrustManager() };
}
try {
context = SSLContext.getInstance("SSL");
context.init(null, tmf.getTrustManagers(), new SecureRandom());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
}catch(Exception ex)
{
Log.e(TAG,"allowAllSSL failed: "+ex.toString());
}
return context;
}
I get this error log:
12-18 07:51:42.161: E/Example:LogOnAsync(3161): doInBackground failed: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
12-18 07:51:42.161: W/System.err(3161): javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
12-18 07:51:42.169: W/System.err(3161): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:401)
12-18 07:51:42.169: W/System.err(3161): at libcore.net.http.HttpConnection.setupSecureSocket(HttpConnection.java:209)
12-18 07:51:42.169: W/System.err(3161): at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:478)
12-18 07:51:42.169: W/System.err(3161): at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433)
I'm found ask on my question: In MainAsync:
HttpsTransportSE androidHttpTransport = new HttpsTransportSE(10.0.2.2, 8181, "/server/?wsdl", 10000);
((HttpsServiceConnectionSE) androidHttpTransport.getServiceConnection()).setSSLSocketFactory(trustAllHosts().getSocketFactory());
protected SSLContext trustAllHosts()
{
return allowAllSSL();
}
public SSLContext allowAllSSL() {
SSLContext context = null;
TrustManager[] trustManagers = null;
KeyManagerFactory mgrFact;
try{
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
mgrFact = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
KeyStore keyStore = KeyStore.getInstance("pkcs12");
InputStream in = cntx.getResources().openRawResource(R.raw.keystore);
try {
keyStore.load(in, "password".toCharArray());
mgrFact.init(keyStore, "password".toCharArray());
} catch (CertificateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
in.close();
}
tmf.init(keyStore);
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier()
{
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
if (trustManagers == null) {
trustManagers = new TrustManager[] { new FakeX509TrustManager() };
}
final TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
System.out.println("getAcceptedIssuers");
return null;
}
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
System.out.println("Сведения о сертификате : " + chain[0].getIssuerX500Principal().getName() + "\n Тип авторизации : " + authType);
}
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
System.out.println("checkClientTrusted : " + authType);
}
} };
//tmf.getTrustManagers()
try {
context = SSLContext.getInstance("TLS");
context.init(mgrFact.getKeyManagers(), trustAllCerts, new SecureRandom());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
}catch(Exception ex)
{
Log.e(TAG,"allowAllSSL failed: "+ex.toString());
}
return context;
}
javax.net.ssl.SSLHandshakeException:找不到证书路径信任锚:java.security.cert.CertPathValidatorException
Android的KSOAP2 SSL java.security.cert.CertPathValidatorException
javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:未找到证书路径的信任锚
Android - Retrofit2 - java.security.cert.CertPathValidatorException:未找到认证路径的信任锚