Articles of ssl certificate

如何在Android中实现叶/中间证书固定?

我已经在我的项目中实施了叶证书,它工作正常。 请检查下面的代码,现在问题是叶证书将在我的服务器一年后过期,所以我想validation叶证书,以便它到期/无效时,我使用中级证书? 有没有例子来实现中间证书? 请帮帮我! 码:- SSLContext sslContext = null; try { CertificateFactory cf = CertificateFactory.getInstance("X.509"); InputStream caInput = context.getResources().openRawResource(certRawRef); 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); // Create a TrustManager […]

以编程方式添加证书颁发机构,同时保持Android系统SSL证书

在StackOverflow上有关于这个主题的很多问题,但我似乎没有find与我的问题有关的问题。 我有一个需要与HTTPS服务器进行通信的Android应用程序:有的使用在Android系统密钥库(普通HTTPS网站)中注册的CA进行签名,有的使用我自己拥有的CA进行签名,但不在Android系统密钥存储区(带有例如自动签名的证书)。 我知道如何以编程方式添加我的CA,并强制每个HTTPS连接使用它。 我使用下面的代码: public class SslCertificateAuthority { public static void addCertificateAuthority(InputStream inputStream) { try { // Load CAs from an InputStream // (could be from a resource or ByteArrayInputStream or …) CertificateFactory cf = CertificateFactory.getInstance("X.509"); InputStream caInput = new BufferedInputStream(inputStream); Certificate ca; try { ca = cf.generateCertificate(caInput); } finally { caInput.close(); } // Create […]

如何将请求代理到api.twitter.com,包括SSL证书?

我正在使用Twitter的新的面向Android的Fabric SDK 。 我已经在我的Mac上设置了Charles作为代理,所以我可以分析API响应中的JSON负载。 Charles中的SSL代理已启用,访问权限已授予我的testing设备。 但是,查尔斯向我展示了任何向Twitter发送请求的错误: url https://api.twitter.com 状态失败 SSLHandshake 失败 :收到致命警报:certificate_unknown Logcat显示我: retrofit.RetrofitError: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:306) at com.squareup.okhttp.Connection.upgradeToTls(Connection.java:241) at com.squareup.okhttp.Connection.connect(Connection.java:158) at com.squareup.okhttp.Connection.connectAndSetOwner(Connection.java:174) at com.squareup.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:120) Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. at […]

Android WebView SSL“安全警告”

我正在为客户端构build一个应用程序的testing版本。 这个应用程序的一部分使用调用一个基于SSL的网站的WebView。 客户端又提供了一个testing域,证书名称与FQDN不匹配。 唉,他们不能提供相匹配的证书。 🙁 我正在使用一行代码(同样,不是用于生产用途 – 仅用于testing目的)在伴随iOS ad hoc应用程序上解决此问题。 我已经在Android操作系统上search了类似的信息,但是我在这里和其他地方看到的解决scheme足以让我的头脑比较大转弯! 有没有一个简单的方法来解决这个问题? 即使面向用户的设置隐藏在某个地方? 线索赞赏!

CertificateException – OpenSSLX509CertificateFactory $ ParsingException

我有我的Android项目中的连接到安全服务器的以下代码。 我得到parsing错误。 [粘贴下面]。如果有人知道这个例外,请让我知道。 提前致谢。 代码片段 CertificateFactory cf = CertificateFactory.getInstance("X.509"); InputStream caInput = new BufferedInputStream(new FileInputStream("/storage/emulated/0/cert.p12")); Certificate ca; try { ca = cf.generateCertificate(caInput); // error at this line System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN()); } finally { caInput.close(); } 错误 01-15 17:01:00.107: W/System.err(14932): java.security.cert.CertificateException: com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException: com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException: java.lang.RuntimeException: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag 01-15 17:01:00.107: W/System.err(14932): at com.android.org.conscrypt.OpenSSLX509CertificateFactory.engineGenerateCertificate(OpenSSLX509CertificateFactory.java:272) 01-15 17:01:00.107:W […]

如何解决“input凭证存储密码”的问题?

所以我正在玩小提琴手的网页代理。 我需要解密httpsstream量。 所以我试图把提琴手根CA证书在我的设备信任存储。 但它一直问我"Enter the password for credential storage" 。 如果我input任何东西,然后点击进入,我看到一个Toast消息说 凭证存储已被删除 并再次input密码提示。 这继续循环。 为了logging,我select了"Wifi"作为凭证使用,而不是"App n VPN" (不太确定)。 接下来有线的东西,我注意到,每次提示后,标签的描述变化 包包含 每次显示密码提示时,它的值都会增加。 例如 – 3个CA证书,4个CA证书等等… 尽pipe我希望我的设备能够接受此证书,但是如果有人能够解释“凭证存储”概念和CA证书文本的奇怪增量,我将不胜感激。 使用Fiddler Web代理拦截Androidnetworking调用

如果证书是从特定的自签名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资源中。 我能怎么做?

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

我以编程方式安装了证书。 我可以通过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<String> 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 = […]

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

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

在哪里可以find用户安装证书的Android 4.0及以上

我已经安装了我的证书(.crt),如下所示:将设备连接到我的电脑 – >将证书复制到内部存储 – >在设备上进入设置 – >安全 – >从存储安装 – “并获得”安装成功“或什么东西(它要求我把设备的PIN码)。 然后,我试着在设置 – >安全 – >受信任的凭据,找不到它在系统或用户标签…(我已经理解它应该在用户选项卡,但它是空的)。 我认为在安装过程中没有任何问题,因为它要求我input密码(并且在我通过从安全菜单中单击“清除证书”来删除所有证书之前,不让我撤消它) 帮助some1? 谢谢!