相关疑难解决方法(0)

没有同行证书.不确定要走哪条路线

我正试图用我的应用程序点击https网址.我已经按照本教程.我创建的商店有正确的CA. 但是,当我尝试建立连接时,我收到以下错误:

ERROR/IOException(1843): webPost: javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
Run Code Online (Sandbox Code Playgroud)

我已经完成了一些有关此错误的阅读,人们决定允许他们的应用程序接受所有证书.我认为这不是真的可以接受.我应该检查一下,看看问题是什么?

https android

6
推荐指数
1
解决办法
9897
查看次数

带有 TLS 1.3 的 Java 11 SSLHandshakeException:如何恢复到 TLS 1.2?

我的应用程序是一种“网络爬虫”形式,它使用Java Jsoup 库从所需的输入页面加载 HTML 。我最近将我的应用程序平台从 Java 8 升级到了 Java 11。通过这次升级,我收到了一些客户的报告,说他们在尝试加载某些网页的 HTML 内容时收到 SSLHandshakeExceptions。这些出现的网页因设备而异,在某些设备上,我的客户端根本无法加载任何网页(http:// 和 https:// 网页都没有)。

我尝试通过多种方式解决此问题,但无济于事:

  1. 用 Java 8 运行时的 CACERT 文件替换 Java 11 运行时的 CACERT 文件
  2. 创建一个自定义 SSL 证书接受器,无论有效性如何,它都接受所有 SSL 证书(我知道这对生产代码不利,但这仅用于测试目的)-请参阅通过 HTTPS 使用 HttpClient 信任所有证书

在这一点上,我不确定要采取哪些选择,因为我对 SSL、TLS 和 HTTPS 的了解有限。这些错误在 Java 8 中从未发生过,并且在升级到 Java 11 之前一切正常。

根据我的理解,Java 11 关于 SSL 的唯一改变是升级到 TLS 1.3,而之前版本的 Java 依赖于使用 TLS 1.2。

因此,我想强制 Java 11 使用 TLS 1.2 而不是 TLS 1.3,因为我认为这是 SSLHandshakeExceptions 的原因。我该怎么做呢?

java ssl tls1.2 java-11

6
推荐指数
2
解决办法
1万
查看次数

android上不受信任的证书错误和httpclient

我正在使用Apache HttpClient库来设置https连接.不幸的是Android给了我一个"不值得信任的服务器证书"错误.如果我使用手机浏览器浏览网站,它会正确验证证书,这让我相信我需要让HttpClient"知道"手机上的根证书.这是我的HttpClient设置代码:

HttpParams params = new BasicHttpParams();

HttpConnectionParams.setConnectionTimeout( params, 20000 );
HttpConnectionParams.setSoTimeout( params, 20000 );

HttpProtocolParams.setVersion( params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset( params, HTTP.DEFAULT_CONTENT_CHARSET);
HttpProtocolParams.setUseExpectContinue( params, false);

SchemeRegistry schReg = new SchemeRegistry();
schReg.register( new Scheme( "http", PlainSocketFactory.getSocketFactory(), 80 ) );
schReg.register( new Scheme( "https", SSLSocketFactory.getSocketFactory(), 443 ) );

ClientConnectionManager conMgr = new ThreadSafeClientConnManager( params, schReg );

DefaultHttpClient defaultHttpClient = new DefaultHttpClient( conMgr, params );

return ( defaultHttpClient );
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我对SSLSocketFactory没有任何特别之处.如何在不在密钥库中添加自定义证书的情况下使HttpClient库验证我的站点?我应该创建自定义SSLSocketFactory并从Android手机加载cacerts.bks吗?在这种情况下,我可能会遇到不同手机上密钥库的不同密码问题?

如果您需要更多信息,请与我们联系.这个SSL的东西对我来说非常困难.

ssl https android keystore

5
推荐指数
1
解决办法
1万
查看次数

javax.net.ssl.SSLPeerUnverifiedException:尝试使用https与.bks密钥库进行连接时没有对等证书

可能重复:
javax.net.ssl.SSLException:不受信任的服务器证书

我正在尝试使用带有.bks密钥库的"https"方案连接到服务器,但由于此问题我无法连接.

任何人都可以告诉我这是什么原因以及如何解决这个问题.

这是我的代码

public String httpRestGetCallwithCertificate(String url, String payLoad) {
        String result = null;
        DefaultHttpClient httpClient = null;
        KeyStore trustStore = null;
        try {
            httpClient = new DefaultHttpClient(getHttpParams());
            HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;

            HttpHost targetHost = new HttpHost("hostname","portno","https");
            httpClient.getCredentialsProvider().setCredentials(
                    new AuthScope(targetHost.getHostName(), targetHost.getPort()),
                    new UsernamePasswordCredentials("username","password"));
            trustStore  = KeyStore.getInstance(KeyStore.getDefaultType());

            InputStream instream = mContext.getResources().openRawResource(R.raw.truststore);
            try {
                trustStore.load(instream, "password".toCharArray());

            } finally {
                try { instream.close(); } catch (Exception ignore) {}
            }
            SchemeRegistry registry = new SchemeRegistry();
            SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore);
            socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier); …
Run Code Online (Sandbox Code Playgroud)

ssl android keystore ssl-certificate

5
推荐指数
1
解决办法
1万
查看次数

使用Java从HTTPS URL下载文件

我已经编写了一些代码来从网站下载文件.该代码适用于测试http网址.一旦我将URL更改为https,我就会有一个连接超时.

System.setProperty("http.proxyHost","trproxy.rwe.com") ;
System.setProperty("http.proxyPort", "80") ;
Authenticator.setDefault (new MyAuthenticator("USER","PW"));
//URL url = new URL("http","www.treasury.gov",80,"/ofac/downloads/sdn.csv",new    sun.net.www.protocol.http.Handler());  THIS WORKS
URL url = new URL("https", "downloads.elexonportal.co.uk",443,"/bmradataarchive/download?key=MYKEY&filename="+filename,new sun.net.www.protocol.https.Handler());
url.openConnection();
InputStream reader = url.openStream();
FileOutputStream writer = new FileOutputStream("C:/downloads/"+filename);
Run Code Online (Sandbox Code Playgroud)

如果我将https网址复制到浏览器中,我会被问到我希望保存文件的位置,并且工作正常.任何帮助非常感谢.我试过这个 但是没用

谢谢克里斯

java url https download connect

5
推荐指数
0
解决办法
9101
查看次数

间歇性PeerUnverifiedException:没有与Android客户端的对等证书

我正在尝试使用HTTPS实现Android↔Apache通信,但我收到以下错误.我间歇性地遇到问题,大约30%的时间.

javax.net.ssl.sslPeerUnverifiedException: No peer certificate
Run Code Online (Sandbox Code Playgroud)

我在网上搜索,但任何答案都帮助了我......

这是我的Android代码:

http_post = new HttpPost(Utils.IP_ADDRESS);
http_post_data = new ArrayList<NameValuePair>();
http_post_data.add(new BasicNameValuePair("regId", regid));
http_post_data.add(new BasicNameValuePair("email", globals.userInfo.mail));
http_post_data.add(new BasicNameValuePair("pass", globals.userInfo.pass));
http_post.setEntity(new UrlEncodedFormEntity(http_post_data));

HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, Utils.TIMEOUT_CONNECTION);
HttpConnectionParams.setSoTimeout(httpParameters, Utils.TIMEOUT_SOCKET);

http_client = new DefaultHttpClient(httpParameters);
response = http_client.execute(http_post);
String responseBody = EntityUtils.toString(response.getEntity(), GlobalsSingleton.applicationCharset);
Run Code Online (Sandbox Code Playgroud)

我有GoDaddy证书.那么我需要更改我的服务器或Android代码才能解决这个问题?

apache ssl https android ssl-certificate

5
推荐指数
1
解决办法
288
查看次数

如何让Trust锚点在Android API级别16-19上正常工作

我正在开发一个必须支持API级别16的项目,并要求我对动态URL进行网络调用.我遇到的问题是服务器最近不得不将TLS更新为1.2以实现PCI合规性,默认情况下在Android API 16-19上禁用.虽然启用此功能并不困难,但我遇到了仅针对这些API级别的X509证书问题.

我对它做了很多研究,虽然所有这些链接都很有用:

1)如何在Android应用程序中启用TLS 1.2支持(在Android 4.1 JB上运行)

2)如何使用自签名证书连接到Android(paho客户端)中的Mqtt服务器?

3)java中的SSLSocketFactory

4)允许Java使用不受信任的证书进行SSL/HTTPS连接

5)未找到Android SSL连接的信任锚

6)SSLHandshakeException:未找到证书路径的信任锚.仅适用于Android API <19

7)通过HTTPS使用HttpClient信任所有证书

他们没有解决我遇到的核心问题,即我看到了这个例外:

 com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
     at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:151)
     at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)
 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:409)
     at com.android.okhttp.Connection.upgradeToTls(Connection.java:146)
     at com.android.okhttp.Connection.connect(Connection.java:107)
     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:294)
     at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
     at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296)
     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:503)
     at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:136)
     at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:110)
     at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:96)
    ... 1 more
Run Code Online (Sandbox Code Playgroud)

当我尝试连接到需要TLS1.2的URL时,例如https://www.ssllabs.com/ssltest/viewMyClient.html. …

java ssl android x509certificate sslhandshakeexception

5
推荐指数
0
解决办法
616
查看次数

javax.net.ssl.SSLException:不受信任的服务器证书

我尝试使用Url的XML解析器读取XML数据(" https://....etc ").但我面临以下错误.这是我的日志.

04-08 16:34:23.017:WARN/System.err(8052):javax.net.ssl.SSLException:不受信任的服务器证书

04-08 16:34:23.098:WARN/System.err(8052):at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:371)

04-08 16:34:23.107:WARN/System.err(8052):at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:92)

04-08 16:34:23.107:WARN/System.err(8052):at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381)

04-08 16:34:23.107:WARN/System.err(8052):at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:164)

04-08 16:34:23.116:WARN/System.err(8052):at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)

04-08 16:34:23.116:WARN/System.err(8052):at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)

04-08 16:34:23.116:WARN/System.err(8052):at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:348)

04-08 16:34:23.116:WARN/System.err(8052):at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)

04-08 16:34:23.127:WARN/System.err(8052):at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)

04-08 16:34:23.127:WARN/System.err(8052):at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)

04-08 16:34:23.127:WARN/System.err(8052):at androidexperts.apps.prontonnetworks.xmlparser.(xmlparser.java:108)

04-08 16:34:23.196:WARN/System.err(8052):at androidexperts.apps.prontonnetworks.prontonnetworks $ HandlerServer.doInBackground(prontonnetworks.java:486)

04-08 16:34:23.232:WARN/System.err(8052):at androidexperts.apps.prontonnetworks.prontonnetworks $ HandlerServer.doInBackground(prontonnetworks.java:1)

04-08 16:34:23.257:WARN/System.err(8052):在android.os.AsyncTask $ 2.call(AsyncTask.java:185)

04-08 16:34:23.287:WARN/System.err(8052):at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:305)

04-08 16:34:23.307:WARN/System.err(8052):at java.util.concurrent.FutureTask.run(FutureTask.java:137)

04-08 16:34:23.317:WARN/System.err(8052):at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)

04-08 16:34:23.317:WARN/System.err(8052):at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:561)

04-08 16:34:23.317:WARN/System.err(8052):at java.lang.Thread.run(Thread.java:1096)

04-08 16:34:23.317:WARN/System.err(8052):引起:java.security.cert.CertificateException:java.security.cert.CertPathValidatorException:找不到CertPath的TrustAnchor.04-08 16:34:23.327:WARN/System.err(8052):at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:168)

04-08 16:34:23.327:WARN/System.err(8052):at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:366)

04-08 16:34:23.337:WARN/System.err(8052):......还有18个 …

sockets android

4
推荐指数
1
解决办法
2万
查看次数

使用 curl 的 Https 发布请求:Android

我正在尝试使用 curl 执行 https 发布请求。当我执行此请求时,我既没有收到任何响应,也没有收到任何错误或异常。帮助或任何关于这里出了什么问题的线索表示赞赏。谢谢。

curl 命令行格式:

    curl -X POST \
-F 'image=@filename.png;type=image/png' \
-F 'svgz=@filename.svgz;type=image/svg+xml' \
-F 'json={ 
    "text" : "Hello world!",
    "templateid" : "0010",
    "timestamp" : "1342683312", 
    "location" : [ 37.7793, -122.4192 ],
    "facebook" :
    {
        "id": "738124695",
        "access_token": "<VALID_USER_FACEBOOK_TOKEN_WITH_PUBLISH_ACTIONS_PERMISSIONS",
        "expiration_date": "1342683312"                
    }
};type=application/json' \
https://sample.com/api/posts
Run Code Online (Sandbox Code Playgroud)

Facebook发布代码:

public static void uploadToFB() {
    HttpClient client = getNewHttpClient();
    HttpPost httpost = new HttpPost("https://sample.com/api/posts");
    httpost.addHeader("image", "filename.png");
    httpost.addHeader("svgz", "filename.svgz");
    httpost.addHeader("type", "application/json");
    httpost.setHeader("Content-type", "application/json");
    JSONObject data = new JSONObject();
    JSONObject facebook = new …
Run Code Online (Sandbox Code Playgroud)

java https android curl facebook

4
推荐指数
1
解决办法
8520
查看次数

AndroidHttpClient需要更多信息.自签名SSL.可能?

关于AndroidHttpClient的信息很少,特别是我找不到任何好的例子.从我读到的 - 我可以使用此客户端,它已预先配置为SSL.我的目标是2.2+,所以它对我很有用.

  1. 关于我如何使用它有什么好的样本吗?专门用于REST服务POST
  2. 有关如何允许自签名证书的样本吗?我不介意只允许任何证书与将特定证书导入本地商店.

谢谢!

我自己的答案(见下面的代码).

  1. 我有自带签名证书的IIS服务器.我不得不采取额外步骤并生成与外部名称匹配的证书,而不是服务器名称.
  2. 我使用的是AndroidHttpClient.据说,这个客户端具有Android的所有"正确"设置,并从版本8开始支持
  3. 我在Application对象中创建AndroidHttpClient并在其中共享.
  4. 我将注入自定义证书的代码分开,以便以后很容易将其删除.我注意到在App启动时需要花时间从资源加载证书.

我的应用程序单例版本.请参阅顶部的注释,详细了解我用于生成所有内容的命令行.始终使用相同的密码以确保其有效.PKS文件密码必须匹配.

import android.net.http.AndroidHttpClient;
import android.app.Application;
import android.util.Log;
import idatt.mobile.android.providers.DBLog;
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 java.io.InputStream;
import java.security.KeyStore;

/*
To generate PKS:
1. Created cert in IIS7 and then exported as pfx. Follow instruction on SelfSSL: http://www.robbagby.com/iis/self-signed-certificates-on-iis-7-the-easy-way-and-the-most-effective-way/
1a. Download tool: http://cid-3c8d41bb553e84f5.skydrive.live.com/browse.aspx/SelfSSL
1b. Run: SelfSSL /N:CN=mydomainname /V:1000 /S:1 /P:8081
 I use port 8081 on my server
1c. Export from IIS manager to cert.pfx
2. Run command …
Run Code Online (Sandbox Code Playgroud)

android

3
推荐指数
1
解决办法
5131
查看次数

通用图像加载器| SSLHandshakeException:握手失败

我有一个ListView与项目中的一些内容(TextViews,ImageView ...).我正在使用Nostra的UIL加载项目中的图像,但其中一些无法加载.当我打电话时,这就是我得到的Log.v(String.valueOf(failReason.getCause());:

11-16 23:52:20.447: V/javax.net.ssl.SSLHandshakeException: Handshake failed(17467): failz
11-16 23:52:20.657: V/NativeCrypto(17467): SSL handshake aborted: ssl=0x15fd758: Failure in SSL library, usually a protocol error
11-16 23:52:20.657: V/NativeCrypto(17467): error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:762 0x4c2ed485:0x00000000)
11-16 23:52:21.207: V/NativeCrypto(17467): SSL handshake aborted: ssl=0x1562468: Failure in SSL library, usually a protocol error
11-16 23:52:21.207: V/NativeCrypto(17467): error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:762 0x4c2ed485:0x00000000)
Run Code Online (Sandbox Code Playgroud)

你不知道,为什么会出现这个问题或者我该如何解决?

这是一个示例图像,无法加载:

http://bigparty.cz/photos/headlinefoto/13.jpg

(我可以附加一个包含整个错误的日志 - UIL 自动将其放入Log的错误)

android image-loading imageview sslhandshakeexception universal-image-loader

3
推荐指数
1
解决办法
3878
查看次数

android上的httpclient ssl证书

我在ssl使用httpclient在android上有一些麻烦我试图访问自签名证书的细节我希望我的应用程序信任所有证书(我将使用ssl仅用于数据加密).首先,我尝试使用本指南http://hc.apache.org/httpclient-3.x/sslguide.html在桌面上工作正常,但在Android上我仍然得到javax.net.ssl.SSLException:不信任的服务器证书.在谷歌搜索后我发现了一些其他的例子如何启用ssl.

http://groups.google.com/group/android-developers/browse_thread/thread/62d856cdcfa9f16e - 当我使用URLConnection但使用HttpClient时工作仍然有例外.

http://www.discursive.com/books/cjcook/reference/http-webdav-sect-self-signed.html - 在桌面上使用来自apache的jars工作但在android中使用包含在SDK类中无法使其工作.

http://mail-archives.apache.org/mod_mbox/hc-httpclient-users/200808.mbox/%3C1218824624.6561.14.camel@ubuntu%3E - 也得到同样的例外

所以任何想法如何使用HttpClient信任Android上的所有证书

ssl android certificate httpclient

2
推荐指数
1
解决办法
2万
查看次数

接受自签名证书是否安全?

我有一个Android应用程序,javax.net.ssl.SSLException: Not trusted server certificate当我尝试将自己的服务器与我自己的自签名证书一起使用时,我会继续使用它.

我正在考虑配置Android TrustManager以接受自签名证书,或接受所有证书,以便我可以调试我的应用程序.我在这个网站上阅读了一些关于如何做到这一点的资源.这样做安全吗?

security ssl android certificate

0
推荐指数
1
解决办法
1279
查看次数