Articles of ssl certificate

使用客户端证书和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 […]

如何将请求代理到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 = […]