How Can I Access an SSL Connection Through Android?

前端 未结 2 1690
广开言路
广开言路 2020-12-01 04:02

I started following a tutorial that wasn\'t cased around Android and got this:

    System.setProperty(\"javax.net.ssl.trustStore\", \"truststore\");
    Syst         


        
相关标签:
2条回答
  • 2020-12-01 04:42

    1) It depends. Do you have a self signed cert on the server side and you are trying to validate your identity to the android device? Or are you on the android side trying to validate your idendity to the server? If it is the former , then please see this link: http://www.codeproject.com/KB/android/SSLVerification_Android.aspx?display=Mobile

    You want to pay particular attention to where it makes the KeyStore file.

    2) The reason you're getting that error is because it doesn't trust the server you are connecting either because you did not create the truststore correctly or you are connecting to a server whose certificate has not been added to the truststore. What exactly are you trying to connect to?

    3) Make sure you have the <uses-permission android:name="android.permission.INTERNET" /> in the manifest.xml.

    Edit My apologies, please see the changes I made to the first paragraph.

    Here is the part to initialize your keystore and truststore

    SSLcontext sslContext = SSLContext.getDefault();
    
    KeyStore trustSt = KeyStore.getInstance("BKS");
    TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    InputStream trustStoreStream = this.getResources().openRawResource(R.raw.truststore);
    trustSt.load(trustStoreStream, "<yourpassword>".toCharArray());
    trustManagerFactory.init(trustStre);
    
    KeyStore keyStore = KeyStore.getInstance("BKS");
    KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
    InputStream keyStoreStream = this.getResources().openRawResource(R.raw.keystore);
    keyStore.load(keyStoreStream, "<yourpassword>".toCharArray());
    keyManagerFactory.init(keyStore, "<yourpassword>".toCharArray());
    
    sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);
    
    0 讨论(0)
  • 2020-12-01 04:46

    You don't need your own truststore unless the peer is using self-signed certifictes. The JRE ships with a truststore that is used by default, which trusts certificates issued by all the major CAs.

    0 讨论(0)
提交回复
热议问题