Articles of ssl certificate

如何在Android 4.1+上将自签名SSL证书导入Volley

我开发使用Volley的 android应用程序。 所有通信都通过HTTPS连接完成。 因为我在本地环境中测试它,所以我使用Tomcat的自签名证书。 以前,我只有android 2.3和3.0设备。 现在我还有4.1和4.4 。 我的实现使用了这种方法: http : //developer.android.com/training/articles/security-ssl.html (部分未知的证书颁发机构 )在Android 高达4.1的设备上,它可以很好地工作。 带有自定义证书的SSLSocketFactory传递给Volley: Volley.newRequestQueue(getApplicationContext(), new HurlStack(null, socketFactory)); 但Android 4.1+会发生什么? 为什么它不起作用? 我也尝试使用NullX509TrustManager : private static class NullX509TrustManager implements X509TrustManager { @Override public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { } @Override public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { } @Override […]

HttpsURLconnection发布并获取Android

我正在开发一个简单的应用程序,它使用https协议从服务器发布和获取数据。 我在互联网上搜索但是资源很少,我尝试了大部分资源但是无法成功完成。 我尝试使用HttpClient它是成功的,但我想用HttpsURLconnection来做 我是否需要从设备中获取公共RSA密钥,如果是这样,我该怎么做呢。 有人能告诉我如何使用httpsURLconnection实现这一httpsURLconnection 。 protected String doInBackground(String… arg0) { try { ByteArrayInputStream derInputStream = new ByteArrayInputStream(app.certificateString.getBytes()); CertificateFactory certificateFactory = CertificateFactory.getInstance(“X.509″,”BC”); X509Certificate cert = (X509Certificate) certificateFactory.generateCertificate(derInputStream); String alias = “alias”;//cert.getSubjectX500Principal().getName(); KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); trustStore.load(null); trustStore.setCertificateEntry(alias, cert); KeyManagerFactory kmf = KeyManagerFactory.getInstance(“X509”); kmf.init(trustStore, null); KeyManager[] keyManagers = kmf.getKeyManagers(); TrustManagerFactory tmf = TrustManagerFactory.getInstance(“X509”); tmf.init(trustStore); TrustManager[] trustManagers […]

如何通过Android访问SSL连接?

我开始关注一个没有安装Android的教程,并得到了这个: System.setProperty(“javax.net.ssl.trustStore”, “truststore”); System.setProperty(“javax.net.ssl.trustStorePassword”, “password”); SSLSocketFactory ssf = (SSLSocketFactory) SSLSocketFactory.getDefault(); try { Socket s = ssf.createSocket(“192.168.2.11”, 6543); PrintWriter out = new PrintWriter(s.getOutputStream()); while (true){ out.println(“SSL TEST”); Log.d(“DATA”, “DATA SENT”); } } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } 我想这归结为几个问题: 我没有创建自己的信任库,但是在线搜索教程和内容,我不知道如何创建一个。 […]

Google Play警告:WebViewClient.onReceivedSslError处理程序

我收到了来自Google的电子邮件,内容如下: Google Play Warning: SSL Error Handler Vulnerability”. In this email, Google explains that my app has an [“unsafe implementation of the WebViewClient.onReceivedSslError handler” 这是我的方法实现(WebView Client): public class MyBrowser extends WebViewClient { boolean timeout; public MyBrowser() { timeout = true; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { try { progressBar.setVisibility(View.VISIBLE); }catch(Exception […]

何时安装密钥库以及何时仅安装密钥库中包含的证书

我有一个PKCS#12文件,我认为它是一个密钥库文件,因为它包含一个密钥条目和一个证书条目 。 在Android中,我看到人们通过以下方式以编程方式安装密钥库 (代码来自Android开发人员博客 ): byte[] keystore = . . (read from a PKCS#12 keystore) Intent installIntent = KeyChain.createInstallIntent(); installIntent.putExtra(KeyChain.EXTRA_PKCS12, keystore); startActivityForResult(installIntent, INSTALL_KEYSTORE_CODE); 我还看到人们以编程方式只安装包装在密钥库中的证书 : Intent intent = KeyChain.createInstallIntent(); intent.putExtra(KeyChain.EXTRA_CERTIFICATE, cert); startActivity(intent); 此外,我还看到人们安装密钥库和密钥库中包含的证书 。 例如, 本文向我们展示了如何首先安装密钥库,然后以编程方式安装包装在密钥库中的证书。 我真的很困惑我应该何时才安装密钥库以及何时应该只安装证书 (包装在密钥库中)? 什么时候应该安装? 请问有人让我明白这个吗? 例如,我的密钥库PKCS#12文件(mycert.p12)包含密钥/证书对,它用于连接到VPN服务器。 什么时候我的android客户端应该安装密钥库中包含的密钥库和证书 ? 客户端何时应该只安装包装在密钥库中的证书 ? 有什么区别 ? 我对此很困惑。

证书固定不适用于Android上的OkHttp

在Android应用上使用com.squareup.okhttp:okhttp:2.4.0和com.squareup.retrofit:retrofit:1.9.0 ,尝试通过HTTPS与服务器REST API通信,该API使用自签名证书。 服务器密钥库具有私钥和2个证书,服务器和根证书。 openssl s_client输出 – Certificate chain 0 s:/C=…OU=Dev/CN=example.com i:/C=… My CA/emailAddress=info@example.com 1 s:/C=… My CA/emailAddress=info@example.com i:/C=… My CA/emailAddress=info@example.com 在Android应用程序中,OkHttp使用根证书的SHA1签名进行初始化 – CertificatePinner certificatePinner = new CertificatePinner.Builder() .add(“example.com”, “sha1/5d…3b=”) .build(); OkHttpClient client = new OkHttpClient(); client.setCertificatePinner(certificatePinner); RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(“https://example.com”) .setClient(new OkClient(client)) .build(); 但是当尝试发送请求失败时会出现exception – retrofit.RetrofitError: java.security.cert.CertPathValidatorException: Trust anchor for certification path […]

如何以编程方式删除用户安装的证书?

我以编程方式安装了证书。 我可以通过Settings -> Security -> Trusted Credentials -> User -> Choose the certificate and click the remove button手动卸载它 我想以编程方式删除证书。 这是我尝试过的代码,但它没有用。 javax.security.cert.X509Certificate x509 = javax.security.cert.X509Certificate.getInstance(caRootCertBytes); KeyStore ks = KeyStore.getInstance(“AndroidCAStore”) if (ks != null) { ks.load(null, null); Enumeration aliases = ks.aliases(); while (aliases.hasMoreElements()) { String alias = (String) aliases.nextElement(); java.security.cert.X509Certificate cert = (java.security.cert.X509Certificate) ks.getCertificate(alias); String name = […]

如果证书是从特定的自签名CA签名的,请检查WebViewClient的onReceivedSslError()方法

我想覆盖WebViewClient的onReceivedSslError() 。 在这里,我想检查error.getCertificate()证书是否是从自签名CA签名的,并且仅在这种情况下 ,调用handler.proceed() 。 在伪代码中: @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { SslCertificate serverCertificate = error.getCertificate(); if (/* signed from my self-signed CA */) { handler.proceed(); } else { super.onReceivedSslError(view, handler, error); } } 我的CA的公钥保存在名为rootca.bks的BouncyCastle资源中。 我能怎么做?

Comodo SSL:Chrome移动版和Opera移动版(Android版)上的ERR_CERT_AUTHORITY_INVALID

在某些移动浏览器上,例如适用于Android的Chrome移动版,当我连接到我的https网站时,我收到ERR_CERT_AUTHORITY_INVALID错误。 我没有在每个移动浏览器(如Firefox)上遇到此问题,并且在PC上没有问题。 我的证书是Comodo扩展validation证书。 我正在与法国SSL认证机构Gandi.net签约,Gandi负责获得Comodo EV证书并将其交给我。 甘迪给了我一个基础PEM证书+一个中级PEM证书。 我安装了两个。 我在https://www.ssllabs.com/ssltest/analyze.html上做了分析,当我安装了从Gandi获得的所有证书时,它为其中一个证书(名为“COMODO RSA证书颁发机构”)说“额外下载” 。 我试图调查这个post,但它没有帮助: 仅在移动设备上使用SSL证书“err_cert_authority_invalid” 有人知道什么是错的吗? 谢谢。

如何以编程方式将证书添加到信任库,并将其用于validation服务器身份validation

我的应用程序我想使用https连接到用户指定的服务器,该服务器使用自签名证书。 我现在收集的是,那 自签名证书被拒绝(如预期) android keystore / truststore不用于应用程序,因此应用程序必须构建和使用自己的信任库, 在JDK中有一个“keytool”来构建一个可以作为资源提供给应用程序的信任库,但这不是解决方案,因为我不知道服务器(及其之前的证书) 由于https服务器是用户指定的,因此我事先不知道服务器的证书,因此希望以编程方式将服务器证书添加到应用程序的信任库(通过向用户显示证书并让他接受它)。 一旦添加到信任库,应用程序将使用该信任库来validation服务器。 我不想简单地接受每个自签名证书,而无需用户检查指纹,如网上的一些示例所示。 现在的问题是我对Java和Android完全不熟悉,并且很难理解AndroidHttpClient或DefaultHttpClient的内部工作原理。 我的应用程序中有基本的HTTP工作,但是没有find任何关于如何根据用户的要求在应用程序内部实际将证书添加到信任库的示例。 有人知道如何实现这一点或知道我可以看到的工作实例吗? 任何提示都表示赞赏。 谢谢。 编辑:在K9 Mail的TrustManagerFactory.java类中find解决方案。 如果您有同样的问题,我建议您查看一下。