2013-05-27 11 views
8

Bir REST tabanlı web servisine bağlanmam gerekiyor.Bouncy Castle Keystore (BKS): java.io.IOException: Anahtar deponun yanlış sürümü

(https://someurl.com/api/lookup/jobfunction/lang/EN) IE veya krom tarayıcısında

Bu URL'yi erişmeye çalıştığınızda, ben o zaman güvenir ve ben kullanıcı adı ve şifre girmek zorunda Bundan sonra devam etmek kabul ve gereken bir sertifika almak ben JSON yanıtını al.

Aynı şey bir android uygulaması için programatik olarak yapmak zorundayım.

  1. özel EasySSLSocketFactory ve EasyX509TrustManager, Hiç çalışmaları ile çalıştı. Aşağıdaki hatayı aldım: java.security.cert.CertPathValidatorException: Sertifika yolu için güvenilir bağlantı bulunamadı.

    public class MyHttpClient extends DefaultHttpClient { 
    
    final Context context; 
    
    public MyHttpClient(Context context) { 
        this.context = context; 
    } 
    
    @Override 
    protected ClientConnectionManager createClientConnectionManager() { 
        SchemeRegistry registry = new SchemeRegistry(); 
        registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 
        // Register for port 443 our SSLSocketFactory with our keystore 
        // to the ConnectionManager 
        registry.register(new Scheme("https", newSslSocketFactory(), 443)); 
        return new SingleClientConnManager(getParams(), registry); 
    } 
    
    private SSLSocketFactory newSslSocketFactory() { 
        try { 
         // Get an instance of the Bouncy Castle KeyStore format 
         KeyStore trusted = KeyStore.getInstance("BKS"); 
         // Get the raw resource, which contains the keystore with 
         // your trusted certificates (root and any intermediate certs) 
         InputStream in = context.getResources().openRawResource(R.raw.mykeystore); 
         try { 
          // Initialize the keystore with the provided trusted certificates 
          // Also provide the password of the keystore 
          trusted.load(in, "abcd1234".toCharArray()); 
         } finally { 
          in.close(); 
         } 
         // Pass the keystore to the SSLSocketFactory. The factory is responsible 
         // for the verification of the server certificate. 
         SSLSocketFactory sf = new SSLSocketFactory(trusted); 
         // Hostname verification from certificate 
         // http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html#d4e506 
         sf.setHostnameVerifier(SSLSocketFactory.STRICT_HOSTNAME_VERIFIER); 
         return sf; 
        } catch (Exception e) { 
         throw new AssertionError(e); 
        } 
    } 
    
    :

  2. BKS deposu, i aşağıda

    komutları yürütür önce mykeystore.bks boş bir dosya unutmayın kullanılmış
    keytool -importcert -v -trustcacerts -file "test.crt" -alias IntermediateCA -keystore "mykeystore.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "bcprov-jdk15on-148.jar" -storetype BKS -storepass abcd1234 
    
    
    keytool -list -keystore "mykeystore.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "bcprov-jdk15on-148.jar" -storetype BKS -storepass abcd1234 
    

MyHTTPClient.java aşağıda benziyor

Web servisini aradığımda, aşağıdaki hatayı alıyorum: Nedeniyle: java.lang.AssertionError: java.io.IOException: ke'nin yanlış sürümü y mağaza

Ben kullanıcı adı ve passwd kimlik bilgilerine sahip HTTPS tabanlı dinlenme webcoder bağlanmak için yapmanız gerekenleri söyle. M.Ö. kavanoz ......

+1

Merhaba çocuklar, daima deposu dosyasını oluşturmak için bcprov-jdk15on-146.jar kullanın. En son bcprov-jdk15on-148.jar yerine bcprov-jdk15on-146.jar'ı kullanarak sorunu çözdüm. – user2290834

+0

Java kurulum dizinimde bcprov-jdk15on-148.jar var –

+0

Buraya şu soru soruldu: http://stackoverflow.com/a/33197845/5459467 – Cukic0d

cevap

1

Versiyon 148 Android ile çalışmaz. Sürüm 146 veya 147'yi kullanın.

+0

Hala 146, 147 ve 148 sürümlerinde hata yaşıyorum! –

1

Başkalarından yardım aldım. çözüm adımları izlemektir:

  • 1, İndirme aracı KeyStore Explorer
  • 2, sonra yüklemek, sizin ktp.lar sertifikayı açın ve sonra Araçlar-> Değişikliği Türü
  • 3 seçeneğini BKS-V1, ardından kaydetmek bulmak ve kullan.