Articles of ssl certificate

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

我以编程方式安装了证书。 我可以通过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解决方案。 如果您有同样的问题,我建议您查看一下。

如何在卸载应用程序时删除App安装的可信CA证书

我有一个应用程序,提供安装CA证书的选项,它存储在可信凭据的用户选项卡中,它按预期工作。 仅供参考 (这是我安装证书的方式): Intent installIntent = KeyChain.createInstallIntent(); javax.security.cert.X509Certificate x509 = javax.security.cert.X509Certificate.getInstance(caRootCertBytes); installIntent.putExtra(KeyChain.EXTRA_CERTIFICATE, x509.getEncoded()); installIntent.putExtra(KeyChain.EXTRA_NAME,caRootCertName); startActivity(installIntent); 如果卸载了应用程序,则证书仍保留在受信任的凭据中 。 我希望在卸载应用程序时卸载证书。 我想过使用KeyStore deleteEntry方法删除证书。 仅供参考 (我没有测试过。希望它能够正常工作……我会在测试后更新) 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 […]

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

我已经安装了我的证书(.crt),如下所示:将设备连接到我的计算机 – >将证书复制到内部存储 – >在设备上转到设置 – >安全 – >从存储安装 – >并获得“安装成功“或其他东西(它要求我为设备添加密码)。 然后我尝试在设置 – >安全 – >可信凭证中查找它,但在系统或用户选项卡中找不到它…(我知道它应该在用户选项卡中,但它是空的)。 我认为在安装过程中没有问题,因为它要求我输入密码(并且在我通过单击安全菜单中的“清除凭据”删除所有证书之前不允许我撤消它) 帮助some1? 谢谢!

使用客户端证书和Android的HttpsURLConnection通过SSL上传文件

我正在尝试将文件上传到受SSL保护的Web服务,并且需要客户端证书(由内部CA签名)。 与上传文件相比 ,与Web服务的通信运行良好(下载文件,查询,运行命令和执行各种POST工作正常)。 上传文件时,我得到一个SSLException(javax.net.ssl.SSLException),上面写着“写入错误:ssl = 0x5fe209c0:系统调用期间的I / O错误,同步连接重置”。 我创建了一个重复的服务器并删除了SSL和客户端证书要求,并尝试通过’vanilla’HTTP上传,并且它运行良好。 我尝试过使用setFixedLengthStreamingMode(int)和setChunkedStreamingMode(int)但没有成功。 使用它们时,会从write方法抛出exception,并且当不使用它们中的任何一个时,从getResponseCode()的调用中抛出相同的exception。 我在服务器的EventVwr找不到任何关于错误的EventVwr 。 我们的其他客户端(iOS客户端)能够在那里上传文件,所以它必须是我做的 – 但我无法弄清楚是什么。 我不确定如何进一步调试此问题。 请帮忙。 编辑1 我们做了很多调试工作,发现: 小文件按预期上传(44kb是成功上传的最大文件的大小,并在~1200ms上传)。 46kb文件无法上传。 失败大约需要2分钟(134120ms)。 编辑2 在你的评论中读到之后,现在我让Fiddler玩得很好(感谢这个问题 )。 Fiddler得到了这个文件,但没有成功发送它。 请求(原始)看起来像: POST https://192.168.2.2/rest/transfer/strong/Upload/Full?Path=%5C20140807_113255_20.jpg&Root=2 HTTP/1.1 SessionToken: 1234 // We use this for session management FileMetadata: {“FileSize”:”1315496″,”FileName”:”GrumpyCat.jpg”} Connection: Keep-Alive User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.1.1; GT-N7100 Build/JRO03C) Host: 192.168.2.2 Accept-Encoding: […]

在Android模拟器上安装自定义证书时,两个凭据使用选项“VPN和应用程序”与“Wifi”之间有什么区别?

我正在尝试在Android模拟器上安装Charles证书,我注意到有两个凭据使用选项:“VPN和应用程序”和“Wi-Fi”。 我试着四处寻找有关这两个选项的解释,但是我发现的那个只是说“选一个适合你的用例”。 这两个选项有什么区别? 开发人员应该选择哪一个?

如何在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 […]