Articles of ssl

Android Volley是否支持SSL?

有谁知道Volley是否支持Android中的SSl? 有没有办法通过Volley支持SSL?

Android和Facebook:如何获取登录用户的图片

我在Android应用程序中使用官方Facebook SDK。 用户登录后,我可以获取uid和facebook用户的名字,如下所示: Facebook mFacebook = new Facebook(APP_ID); // … user logs in … //String jsonUser = mFacebook.request(“me/picture”); // throws error String jsonUser = mFacebook.request(“me”); JSONObject obj = Util.parseJson(jsonUser); String facebookId = obj.optString(“id”); String name = obj.optString(“name”); 我也知道我可以使用这些链接访问个人资料图片: https://graph.facebook.com//picture https://graph.facebook.com//picture?type=large 我很乐意使用此代码来查看个人资料图片: public static Drawable getPictureForFacebookId(String facebookId) { Drawable picture = null; InputStream inputStream = null; […]

Android WebView setCertificate发出SSL问题

我看过很多关于SSL错误的post和信息,我自己偶然发现了一个。 我试图通过带有GlobalSign CA BE证书的Android WebView访问网页,我收到了一个不可信的错误。 对于大多数手机来说,它可以正常处理这个问题,并告诉处理程序继续。 但是,有些手机最终会在webview-client中收到onReceivedError,告诉它无法与服务器建立联系。 这是在经过onReceivedSslError并继续进行之后发生的。 我搜索了一些描述并find了很多涉及HttpClient的描述,并且安装了你自己的证书,或者只是欺骗它接受所有。 但是,由于我使用的是WebView,我以为我会使用WebView.setCertificate(SslCertificate crt)。 我搜索了这个函数的讨论,但没有find太多/任何信息。 我拿到了据说不受信任的证书,并且执行了以下代码: try{ Certificate myCert = CertificateFactory.getInstance(“X509”). generateCertificate(this.getResources(). openRawResource(R.raw.globalsign_ca_be)); X509Certificate x509 = (X509Certificate) myCert; SslCertificate sslCert = new SslCertificate(x509); webView.setCertificate(sslCert); } catch (CertificateException ex){ ex.printStackTrace(); } 使用包含以下内容的.cer文件: —– BEGIN CERTIFICATE —– MIIEbjCCA1agAwIBAgILBAAAAAABElatYgQwDQYJKoZIhvcNAQEFBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0wNzA1MDQxMDAw MDBaFw0xNDAxMjcxMTAwMDBaMHExCzAJBgNVBAYTAkJFMR0wGwYDVQQLExREb21h aW4gVmFsaWRhdGlvbiBDQTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEoMCYG A1UEAxMfR2xvYmFsU2lnbiBEb21haW4gVmFsaWRhdGlvbiBDQTCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBALSfSeaznwFVNtA2lWzLFlpscrXineL6OekK 3HNcoDt2bQUokw2lQvPoy + 7TMxoTJwrfXNFUYmqaFzbWPFiHHrJmH1VpK4lWR7TC UAzlXcH9KRtmc0P0b9EUTyptSFI69eSQP96y9BDV + fqslg0QMiPS01GnlYVQ […]

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

SSLHandshakeException未findAndroid HTTPS的证书路径的信任锚

我正在尝试建立与HTTPS站点的连接,并且我遇到了以下exception: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found 。 我原来的代码如下: URL url = new URL(“https://example.com”); HttpsURLConnection urlConnection = (HttpsURLConnection)url.openConnection(); in = urlConnection.getInputStream(); byte[] responsedata = CommonUtil.readInputStream(in); Log.w(TAG, “response is “+CommonUtil.convertBytesToHexString(responsedata)); 然后,我在这里阅读Google的文章,并将我的代码修改为: CertificateFactory cf; try { cf = CertificateFactory.getInstance(“X.509”); InputStream in = this.mContext.getResources().openRawResource(R.raw.cert); Certificate ca; ca = cf.generateCertificate(in); System.out.println(“ca=” + ((X509Certificate) ca).getSubjectDN()); in.close(); URL […]

使用HttpClient在Android中重用SSL会话

我在使用HttpClient在Android上恢复SSL会话时遇到了很多困难。 我每隔90秒轮询一次服务器(仅适用于只有一个function的工业设备),所以我需要恢复会话,否则数据使用从每小时几KB到最高150-200kB,这是不可持续的。 服务器是在Restlet中嵌入Jetty,并且当我使用OpenSSL测试它时支持恢复SSL会话。据我所知。 我正在重用我的HttpClient对象,所以不是那样的。 Android有一个特定的SSLCertificateSocketFactory,我也尝试了它,它似乎也没有用。 有什么我在这里完全不见了? 我假设HttpClient会自动执行此操作,我不确定我做错了什么,互联网上似乎没有人遇到类似的问题。 我通过以下方式设置了httpClient: public HttpClient getNewHttpClient(Context context) { try { HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, HTTP.UTF_8); HttpConnectionParams.setStaleCheckingEnabled(params, false); HttpConnectionParams.setConnectionTimeout(params, 4 * 1000); HttpConnectionParams.setSoTimeout(params, 5 * 1000); HttpConnectionParams.setSocketBufferSize(params, 8192); HttpClientParams.setRedirecting(params, false); SSLSessionCache sslSession = new SSLSessionCache(context); SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme(“http”, PlainSocketFactory.getSocketFactory(), 80)); registry.register(new Scheme(“https”, SSLCertificateSocketFactory.getHttpSocketFactory(10*60*1000, […]

使用自签名证书在Android上创建SSL-Socket

我正在尝试将Android应用程序连接到启用SSL的服务器,该服务器使用自签名证书。 我已经阅读了几十个教程,应用程序现在接受证书并连接到服务器,但我从来没有得到任何数据。 我用来初始化套接字的原始代码是这样的: //passphrase for keystore char[] keystorePass=”password”.toCharArray(); //load own keystore (MyApp just holds reference to application context) KeyStore keyStore=KeyStore.getInstance(“BKS”); keyStore.load(MyApp.getStaticApplicationContext().getResources().openRawResource(R.raw.keystore),keystorePass); //create a factory TrustManagerFactory trustManagerFactory=TrustManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(keyStore); //get context SSLContext sslContext=SSLContext.getInstance(“TLS”); //init context sslContext.init( null, trustManagerFactory.getTrustManagers(), new SecureRandom() ); //create the socket Socket socket=sslContext.getSocketFactory().createSocket(“hostname”,443); socket.setKeepAlive(true); 之后,接收器线程的运行循环使用socket.getInputStream()来访问输入流。 只要我使用未加密的连接,这没有问题。 但是安全连接不会从套接字中检索任何数据 。 我通过向接收循环添加日志消息来validation这一点,甚至使用OpenSSL的s_server进行检查。 我从客户端检索数据,但客户端从未收到我发送给它的任何内容。 作为最后一次测试,我尝试打开与www.google.com:443的连接,如下所示: javax.net.SocketFactory fact=SSLSocketFactory.getDefault(); Socket […]

javax.net.ssl.SSLHandshakeException:连接由com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(本机方法)上的peer关闭

在api level 24之前,我的代码工作正常,但它在api level 24(7.0牛轧糖)上给我错误。 我没有得到我的代码出了什么问题。 第一种方法是: xyz.com 内部清单文件: android:network Security Config = “@xml/network_security_config”我在res/xml/network_security_config包含了res/xml/network_security_config , ca证书在res/raw/my_ca.pem 第二种方法是: import org.apache.http.client.HttpClient; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.impl.client.DefaultHttpClient; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.UnrecoverableKeyException; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; […]

需要帮助理解证书链

目前我正在编写一个java库来访问pointhq.com的REST API。 在开发Android客户端时,我意识到默认情况下不接受SSL证书,因此我编写了一个自定义TrustManager并添加了pointhq.com证书,如本文所述: 使用HttpClient通过HTTPS信任所有证书 使用此Trustmanager和我导入的bks文件,我在尝试连接时收到以下错误: IssuerName(CN=GeoTrust Global CA, O=GeoTrust Inc., C=US) does not match SubjectName(CN=RapidSSL CA, O=”GeoTrust, Inc.”, C=US) of signing certificate. 那我做错了什么? 我导入了pointhq.com,rapidssl.com,geotrust.com证书。 但没有改变。 是否有一种我必须注意的证书分类? 我错过了根证书吗? 编辑:这是导入证书的列表: types:BKS提供者:BC条目:3 条目别名:geotrust global ca创建日期:19.10.2011 15:44:35 MESZtypes:可信证书证书:1 Certificate 1 of 1 Version: 3 Subject: CN=GeoTrust Global CA, O=GeoTrust Inc., C=US Issuer: CN=GeoTrust Global CA, O=GeoTrust Inc., C=US Serial […]

如何通过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(); } 我想这归结为几个问题: 我没有创建自己的信任库,但是在线搜索教程和内容,我不知道如何创建一个。 […]