Articles of ssl

Android ssl:javax.net.ssl.SSLPeerUnverifiedException:没有对等证书(再次)

我有一个网站,我正在为一个RESTful服务启用ssl。 我们已在RapidSSL注册,安装了证书,并通过了RapidSSL检查程序 。 我可以使用各种浏览器访问该网站,包括Android浏览器(内置,Firefox和Opera)没有问题,没有警告。 但是,当我尝试使用我的Android应用程序访问它时,我得到以下exception: 08-11 20:04:05.586 363 381 E HttpProvider: Error executing request: No peer certificate 08-11 20:04:05.586 363 381 E HttpProvider: javax.net.ssl.SSLPeerUnverifiedException: No peer certificate 08-11 20:04:05.586 363 381 E HttpProvider: at org.apache.harmony.xnet.provider.jsse.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:259) 08-11 20:04:05.586 363 381 E HttpProvider: at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:93) 08-11 20:04:05.586 363 381 E HttpProvider: at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381) 08-11 20:04:05.586 363 381 […]

如何在使用React Native时实现SSL证书固定

我需要在我的反应本机应用程序中实现SSL证书固定。 我对SSL / TLS知之甚少,更不用说固定了。 我也不是一个本地移动开发人员,虽然我了解Java并且在这个项目上学习了Objective-C足以绕过它。 我开始搜索如何执行此任务。 React Native没有实现这个吗? 不,我的初步搜索引导我查看自2016年8月2日以来未收到任何活动的提案 。 从中我了解到react-native使用的OkHttp确实支持Pinning,但是我无法将其从Javascript中删除,这不是真正的要求,而是一个加号。 在Javascript中实现它。 虽然反应似乎使用了nodejs运行时,但它更像是一个浏览器而不是节点,这意味着它不支持所有本机模块,特别是https模块,我已经在本文后面实现了证书固定。 因此无法将其带入本机反应。 我尝试使用rn-nodeify,但模块不起作用。 自从我目前正在使用RN 0.33到RN 0.35以来,这是真的。 使用phonegap插件实现 我想过使用phongape-plugin但是因为我依赖于需要反应0.32+的库我不能使用react-native-cordova-plugin 只是本地做 虽然我不是本机应用程序开发人员,但我总是可以解决它,只是时间问题。 Android有证书固定 我了解到android支持SSL Pinning但是不成功,因为看起来这种方法在Android 7之前不起作用。以及仅适用于android。 底线 我已经用尽了几个方向,并将继续寻求更多本机实现,也许可以弄清楚如何配置OkHttp和RNNetworking然后可能会回到本地反应。 但是,IOS和Android已经有任何实现或指南吗?

使用客户端证书和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 App使用Socket.io连接到Node.js服务器

我无法让我的Android应用程序连接到socket.io聊天服务器。 我正在使用Gottox创建的socket.io-java-client,可以在这里find: https : //github.com/Gottox/socket.io-java-client 服务器通过端口7000在本地运行。我正在使用android模拟器,所以我使用10.0.2.2:7000来访问服务器。 任何帮助将不胜感激,我对SSL没有多少经验。 如果我find一个可行的解决方案,我也会发布它。 Node.js服务器 var express = require(‘express’); var app = express(); var server = require(‘http’).createServer(app).listen(7000); var io = require(‘socket.io’).listen(server); io.sockets.on(‘connection’, function(client){ client.on(‘message’, function(err, msg){ client.broadcast.emit(‘message’, msg); }); }); 的package.json { “name”: “simplechat”, “version”: “0.0.1”, “main”: “app.js”, “dependencies”: { “express” : “~4.0.0”, “socket.io” : “~0.9.13” } } Android:SendMessageActivity public class […]

Android操作系统中使用SSLSocket的TLS连接速度较慢

我正在开发一个使用SSLSocket连接到服务器的Android应用程序。 这是我正在使用的代码: // Connect if (socket == null || socket.isClosed() || !socket.isConnected()) { if (socket != null && !socket.isClosed()) socket.close(); Log.i(getClass().toString(), "Connecting…"); if (sslContext == null) { sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, trustAllCerts, new SecureRandom()); } SSLSocketFactory socketFactory = sslContext.getSocketFactory(); socket = (SSLSocket)socketFactory.createSocket(host, port); socket.setSoTimeout(20000); socket.setUseClientMode(true); connected = true; Log.i(getClass().toString(), "Connected."); } // Secure if (connected) […]

在Android设备上生成客户端证书

我想创build一个将使用SSL客户端证书authentication的Android应用程序。 我已经find示例代码,告诉我如何在Android应用程序中使用SSL客户端证书身份validation。 这对我来说很清楚。 我的问题是,我想在设备上生成一个SSL客户端证书。 简单地说,我希望我的程序执行以下操作: 在设备上安装程序时,应在设备上生成客户端证书(首次运行时),并将公钥指纹发送到我的服务器。 (证书必须在首次使用时生成)。 如何从我的应用程序生成客户端证书和Android设备?

从APK中确定签名证书

我已经从Eclipse for Android创build了一个签名的APK。 我想知道哪个RSA证书types在像RSA-1024或RSA 2048那样签名的APK中使用。 我怎么知道从APK文件? 编辑标题从“在Eclipse中签名APK使用哪个RSA证书?如何知道RSA密钥大小(1024/2048)?”

在Android设备上存储新密码后,“stream不代表PKCS12密钥存储”

我写了一个使用KeyStore来validationSSL连接的Android应用程序。 但是,当我用正确的密钥加载p12文件并存储一个新的,下一次我尝试加载它与新的密钥我得到这个exception: java.io.IOException:stream不代表PKCS12密钥库 在com.android.org.bouncycastle.jce.provider.JDKPKCS12KeyStore.engineLoad(JDKPKCS12KeyStore.java:691) 在java.security.KeyStore.load(KeyStore.java:589) 出了什么问题? 非常感谢你!

我有一个keystore文件,如何在Android应用程序中提供keyManagers到sslContext?

更新:至于我原来的问题,事实certificate,调用java.security.KeyStore.getCertificate(别名)确实返回X509Certiciate。 这不是问题。 (拜托我,我是新来的这个证书的东西。) 我设法连接到我的(自签名的)启用了SSL的服务器,只要我不需要validation的客户端。 当我需要clientAuth我的应用产生“例程:SSL3_READ_BYTES:sslv3警报握手失败(外部/ openssl / ssl / s3_pkt.c”… ( 这里也描述)…对于一些治愈是从BKS切换到PKCS12 ,那对我不起作用。 所以现在我试图实现我自己的X509KeyManager (如这里所build议的),把它交给sslContext.init([keyManager], trustManagers, null) 。 如果我理解正确,sslContext会向我的密钥pipe理器询问给定别名的证书链和/或私钥。 (每当询问什么别名时,我都会提供硬编码的)。 但根据X509KeyManager接口,我应该返回X509Certificate 。 如何使用密钥库创build一个?

Android java.security.cert.CertPathValidatorException:找不到证书path的信任锚点

有三个主机,一个Android应用程序进行身份validation和授权。 最终主机是REST API。 这是第一次使用Oauthauthentication和授权过程,没有问题。 但是,如果用户在login后杀死应用程序 ,并访问REST API提供的服务,然后再次打开应用程序,则会出现此问题。 在这个时候authentication和授权过程不会发生,只有REST API。 它导致java.security.cert.CertPathValidatorException 但它在第一次使用(login,然后使用应用程序)期间工作。 有人可以解释这个例外背后的情况,什么是错的应用程序。 根据这个答案,如果authentication例外被忽略, 这是有效的 。 SSLSocketFactory sslSocketFactory = null; try { TrustManagerFactory tmf = TrustManagerFactory.getInstance( TrustManagerFactory.getDefaultAlgorithm()); // Initialise the TMF as you normally would, for example: try { tmf.init((KeyStore)null); } catch(KeyStoreException e) { e.printStackTrace(); } TrustManager[] trustManagers = tmf.getTrustManagers(); final X509TrustManager origTrustmanager = (X509TrustManager)trustManagers[0]; // […]