I need to open a HttpsURLConnection with my own certificate. I've
found this for Java (not Android) on http://forums.sun.com/thread.jspa?threa ... ID=1886339
Using java Syntax Highlighting
- public static String readFromURL( String httpsUrl, String login, String password ) throws NoSuchAlgorithmException, KeyManagementException, MalformedURLException, UnknownHostException, IOException {
- // Variabeln
- TrustManager[] trustAllCerts;
- SSLContext sc;
- URL url;
- HttpsURLConnection connection;
- String s;
- String base64;
- BufferedReader reader;
- StringBuffer str;
- String line;
- trustAllCerts = new TrustManager[] { new X509TrustManagerImpl() };
- // Let us create the factory where we can set some parameters for the connection
- sc = SSLContext.getInstance( "SSL" );
- sc.init( null, trustAllCerts, new SecureRandom() );
- // Create the socket connection and open it to the secure remote web server
- url = new URL( httpsUrl );
- HttpsURLConnection.setDefaultSSLSocketFactory( sc.getSocketFactory() );
- connection = (HttpsURLConnection)url.openConnection();
- // Once the connection is open to the remote server we have to replace the default HostnameVerifier
- // with one of our own since we want the client to bypass the peer and submitted host checks even
- // if they are not equal. If this routine were not here, then this client would claim that the submitted
- // host and the peer host are not equal.
- connection.setHostnameVerifier( new HostnameVerifierImpl() );
- // Make this URL connection available for input and output
- connection.setDoOutput( true );
- // Login
- s = login + ":" + password;
- base64 = "Basic " + new BASE64Encoder().encode( s.getBytes() );
- connection.setRequestProperty( "Authorization", base64 );
- connection.connect();
- // vom Stream lesen und als String zurückgeben
- reader = new BufferedReader( new InputStreamReader( connection.getInputStream() ) );
- str = new StringBuffer();
- while( (line = reader.readLine()) != null ) {
- str.append( line + "\n" );
- }
- return( str.toString() );
- }
Parsed in 0.037 seconds, using GeSHi 1.0.8.4
Using java Syntax Highlighting
- public class X509TrustManagerImpl implements X509TrustManager {
- // Log4J
- private static Logger logger = Logger.getLogger( X509TrustManagerImpl.class );
- /**
- * Return an array of certificate authority certificates which are trusted
- * for authenticating peers.
- * @return <code>X509Certificate[]</code> - Return an array of certificate
- * authority certificates which are trusted for authenticating peers.
- */
- public X509Certificate[] getAcceptedIssuers() {
- return( null );
- }
- /**
- * Given the partial or complete certificate chain provided by the peer,
- * build a certificate path to a trusted root and return if it can be
- * validated and is trusted for client SSL authentication based on the
- * authentication type. The authentication type is determined by the
- * actual certificate used. For instance, if RSAPublicKey is used, the
- * authType should be "RSA". Checking is case-sensitive.
- * @param chain <code>X509Certificate[]</code> the peer certificate chain
- * @param authType <code>String</code> the authentication type based on
- * the client certificate
- */
- public void checkClientTrusted( X509Certificate[] chain, String authType ) {
- }
- /**
- * Given the partial or complete certificate chain provided by the peer,
- * build a certificate path to a trusted root and return if it can be
- * validated and is trusted for server SSL authentication based on the
- * authentication type. The authentication type is the key exchange
- * algorithm portion of the cipher suites represented as a String, such
- * as "RSA", "DHE_DSS". Note: for some exportable cipher suites, the key
- * exchange algorithm is determined at run time during the handshake. For
- * instance, for TLS_RSA_EXPORT_WITH_RC4_40_MD5, the authType should be
- * RSA_EXPORT when an ephemeral RSA key is used for the key exchange, and
- * RSA when the key from the server certificate is used. Checking is
- * case-sensitive.
- * @param chain <code>X509Certificate[]</code> the peer certificate chain
- * @param authType <code>String</code> the authentication type based on
- * the client certificate
- */
- public void checkServerTrusted( X509Certificate[] chain, String authType ) {
- }
- }
Parsed in 0.033 seconds, using GeSHi 1.0.8.4
Using java Syntax Highlighting
- public class HostnameVerifierImpl implements HostnameVerifier {
- // Log4J
- private static Logger logger = Logger.getLogger( HostnameVerifierImpl.class );
- /**
- * Verify that the host name is an acceptable match with the server's authentication scheme.
- * @param hostname <code>String</code> the host name
- * @param session <code>SSLSession</code> SSLSession used on the connection to hos
- */
- public boolean verify( String hostname, SSLSession session ) {
- if( ! hostname.equals( session.getPeerHost() ) ) {
- logger.warn( "Das Zertifikat " + session.getPeerHost() + " passt nicht zum Host " + hostname );
- }
- return true;
- }
- }
Parsed in 0.035 seconds, using GeSHi 1.0.8.4
the problem inside android is, that base64encoder isnt integrated.
i've found a working one inside the jar: http://www.winterwell.com/software/jtwitter.php
but its still not working. ssl seems not to be inside android
can you help me on this?
I can send the exception later...
greetings
darolla


Basically i describe the developmend of an app from the idea up to the implementation
