- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在尝试使用 HttpsURLConnection 连接到我们的后端时验证 Verisign 证书时遇到问题。
当前的认证链:$openssl s_client -connect 主机:443
0 s:/C=AT/ST=xxx/L=xxx/O=xxx/CN=host
i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 International Server CA - G3
1 s:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 International Server CA - G3
i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Auth
ority - G5
2 s:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Auth
ority - G5
i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
3 s:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
我很确定我已经下载了所有证书并将其添加到 KeyStore 中,但我仍然遇到异常:“javax.net.ssl.SSLException: Not trusted server certificate”,原因是 java.security.cert.CertificateException:java.security.cert.CertPathValidatorException:找到 TrustAnchor 但证书验证失败。
我的获取连接的代码:
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("verisign_0", getVerisign0());
keyStore.setCertificateEntry("verisign_1", getVerisign1());
keyStore.setCertificateEntry("verisign_2", getVerisign2());
keyStore.setCertificateEntry("verisign_3", getVerisign3());
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, tmf.getTrustManagers(), null);
HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
urlConnection.setSSLSocketFactory(context.getSocketFactory());
return urlConnection;
调用 connection.connect()
时出现问题。所有 getVerisign() 方法都会返回正确的证书。有没有我忘记的步骤?也许应该添加证书的特殊顺序?
澄清一下,我已经将这种技术与 swisssign 证书一起使用并且有效。我遇到这个问题是因为一些 Android 2.1、2.2 设备没有一些根证书。提前致谢。
堆栈跟踪:
[0] = {java.lang.StackTraceElement@830078967208}"org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:168)"
[1] = {java.lang.StackTraceElement@830078967584}"org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:366)"
[2] = {java.lang.StackTraceElement@830078967960}"org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.getSecureSocket(HttpConnection.java:168)"
[3] = {java.lang.StackTraceElement@830078968368}"org.apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:399)"
[4] = {java.lang.StackTraceElement@830078968816}"org.apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:147)"
最佳答案
如果没有进一步的代码,我无法判断,但是,我可以看到您加载了受信任的证书,但是您在哪里加载自己的 keystore ?如果它在其他代码中,我无法判断。
还有当您尝试使用外部信任库时会发生什么,例如$JAVA_HOME/jre/lib/security/cacerts
假设您真的想使用动态信任库(通常它们是非常静态的),请查看
http://jcalcote.wordpress.com/2010/06/22/managing-a-dynamic-java-trust-store/
关于java - 验证服务器 Verisign 证书抛出不受信任的服务器证书异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16417606/
我使用了以下命令: C:\Verisign>signtool sign /v /ac "MSCV-VSClass3.cer"/s MY /n "ABC Company LTD" /t http://
我正在开发基于 Eclipse 的产品,目前在其上安装插件时遇到问题。尽管证书是由 VeriSign 颁发的(并且插件在导出时使用证书正确签名),但在安装“您信任这些证书吗?”时窗口仍然弹出。 现在,
我希望在我的 Azure 托管站点上安装证书,但据我所知,他们只接受 Verisign 证书。这是不幸的,因为威瑞信非常昂贵。还有其他选择吗? 最佳答案 看起来 Windows Azure MSDN
我正在处理一个本地数据库,并希望到该服务器的所有连接都使用 SSL。我读到自签名 SSL 证书不是很安全,最好使用受信任的证书颁发机构,如 Verisign。是否可以在本地服务器上设置 Verisig
在 Java 桌面应用程序中,我需要连接到 SSL URL。当我尝试时,出现异常: SSLHandshakeException:sun.security.validator.ValidatorExce
我在尝试使用 HttpsURLConnection 连接到我们的后端时验证 Verisign 证书时遇到问题。 当前的认证链:$openssl s_client -connect 主机:443 0 s
我写了一个与网络通信无关的 .Net 应用程序。整个应用程序中没有一行代码使用 NIC,但是我的防火墙在应用程序启动时发现它出于某种原因尝试联系 Verisign。这不会经常发生;事实上,它只发生过两
我的应用程序正在使用 java 安全 API 来签署文件并验证它。在签名时,我使用 PFX 文件和密码作为输入,签名后我使用字节生成签名文件。在验证过程中,我使用签名文件、证书文件和签名文件作为输入。
我正在通过 SSL 使用来自远程服务器的网络服务。 远程服务器有一个Tomcat FE。我们让 Verisign 签署了远程服务器证书,证书链是: o:remote.server.comi:VeriS
我有 glassfish 3.1.2 并且需要配置 SSL,所以我引用了 This site .一切似乎都很好,直到我到达最后一个命令 -import -v -alias myservkey -fil
你好 我写了一个程序,我的老板让我对apk文件进行签名而不是自签名,我如何从任何权威机构(如VeriSign)获得证书? 谢谢 最佳答案 您不能使用 Verisign 或其他商业代码签名证书来签署 A
我有许多来自供应商的内部 .NET 应用程序,它们需要很长时间才能启动。他们的一些服务最多需要 1.5 分钟才能启动。经过进一步调查,我注意到在 Process Explorer 的 TCP/IP 选
我在 Solaris 服务器上运行 tomcat,我想知道如何安装 VeriSign 的中间 CA 证书? 我已经苦苦挣扎了好几天,一直有 keytool 错误:java.io.EOFExceptio
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve th
我在信任库中有 Symantec CA。在与 PayPal 服务器握手期间,我收到“未找到受信任的证书”错误。我在 PayPal 开发人员网站上看到了以下内容 If you receive a han
我正在尝试让 jboss 使用 ssl 协议(protocol),使用之前从 verisign 生成的证书,我将证书、服务器证书和 ca 证书都导入到 keytore 文件中,我配置 server.x
我想使用威瑞信中间 CA 对 J2ME midlet 进行签名。有没有人知道如何做到这一点,或者有谁成功地进行了 verisign 代码签名。请帮我完成这些步骤。 最佳答案 您需要一个 Verisig
我有一个脚本需要使用 cURL 来安全地连接到网站 foo.bar.com,该网站由 *.bar.com 的通配符 SSL 证书覆盖。 通配符证书由威瑞信颁发,所有浏览器都信任它,没有任何问题。但是,
我遇到了一个问题并试图调试它。我们购买了 Verisign 证书。当我们使用时: openssl> s_client -connect myweb.com:443 -showcerts SSL 握手从
我分发了一个 Windows 桌面应用程序,其中所有可执行文件均由威瑞信 3 类代码签名证书进行了数字签名。对于绝大多数用户来说,这似乎工作正常。 然而,少数用户报告证书无效。他们说它会出现消息“证书
我是一名优秀的程序员,十分优秀!