On Mon, Nov 5, 2012 at 10:49 AM, Frans van Niekerk <frans.vanniek...@gmail.com> wrote: > What other options are there to create a pure SSL socket, other then > SSLSocketFactory?
The code I referenced in the documentation does create an SSLSocketFactory, the example is just showing how to supply that to the HttpsURLConnection. KeyStore keyStore = ...; TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509"); tmf.init(keyStore); SSLContext context = SSLContext.getInstance("TLS"); context.init(null, tmf.getTrustManagers(), null); URL url = new URL("https://www.example.com/"); HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection(); urlConnection.setSSLSocketFactory(context.getSocketFactory()); > Coming from an JEE background I am used to keeping the things that change > per environment (dev/test/prod) in the environment and not in the code. The > custom keystore approach seems to introduce dev environment requirements > into source code, not only the part where you initialise it, but also the > actually binary for deployment. Is this not seen as problematic in the > Android world? (There are other examples like server urls that might change > that has a similar issue in my mind) Well, if you are using a self-signed server certificate, you don't have much choice but to bake in what is basically server specific information, unless you have some other way to supply the self-signed cert information to the app. And I'm not suggesting a custom KeyStore, just is just they way to provide the self-signed cert to the TrustManager. (These are all just the javax.net.ssl APIs by the way, nothing Android specific). Here is a further example with the details of creating the KeyStore in memory on the fly. Note you can load the bytes for the self-signed cert to trust from where ever you like, including a resource external to the code: // Load CAs from an InputStream (could be a resource or ByteArrayInputStream or ...) CertificateFactory cf = CertificateFactory.getInstance("X.509"); InputStream caInput = new BufferedInputStream(new FileInputStream("load-der.crt")); Certificate ca; try { ca = cf.generateCertificate(caInput); } finally { caInput.close(); } // Create a KeyStore containing our trusted CAs String keyStoreType = KeyStore.getDefaultType(); KeyStore keyStore = KeyStore.getInstance(keyStoreType); keyStore.load(null, null); keyStore.setCertificateEntry("ca", ca); (note my code references CAs because it is from another example I had, but the same applies for a self-signed certificate.) -bri > > Thanks again for taking the time to help me. > > > On Monday, 5 November 2012 20:25:10 UTC+2, Brian Carlstrom wrote: >> >> On Mon, Nov 5, 2012 at 9:27 AM, Frans van Niekerk >> <frans.va...@gmail.com> wrote: >> > According to the android.net.SSLCertificateSocketFactory >> >> I wouldn't recommend using that class or anything related to it if you >> can avoid it. >> >> The Android HttpsURLConnection documentation >> >> http://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html >> has an example of making an application specific X509TrustManager. If >> you provide it a KeyStore containing your self-signed cert, it will >> trust it. >> >> -bri > > -- > You received this message because you are subscribed to the Google Groups > "Android Security Discussions" group. > To view this discussion on the web visit > https://groups.google.com/d/msg/android-security-discuss/-/wKa5AM1jV-0J. > > To post to this group, send email to > android-security-discuss@googlegroups.com. > To unsubscribe from this group, send email to > android-security-discuss+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/android-security-discuss?hl=en. -- You received this message because you are subscribed to the Google Groups "Android Security Discussions" group. To post to this group, send email to android-security-discuss@googlegroups.com. To unsubscribe from this group, send email to android-security-discuss+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/android-security-discuss?hl=en.