GoDaddy SSL证书不适用于Java

2021/01/17 10:31 · java ·  · 0评论

UPDATE 1/26/2015 -- It appears the most recent JRE/JDK for Java 8 (update >= 31) and JRE/JDK for Java 7 now include the Godaddy G2 CA server in the default trust store. If possible, it's urged you upgrade your JRE/JDK to the latest Java 8 update to resolve this issue.

2014年11月29日更新-这仍然是一个问题,Godaddy似乎不在乎也不会对此做任何事情。几个月前,Godaddy安全产品副总裁在这里发表了一篇博客文章,指出正在修复该问题,并提供了一种临时解决方法,但是到目前为止,没有任何变化。请务必注意,Godaddy的G2 CA服务器已经存在至少5年了,在那段时间,Godaddy尚未采取适当的步骤来解决此已知问题。提供的解决方法仅是一种解决方法,而不是解决方案。第三方服务的用户对证书在服务器上的安装方式几乎没有任何控制。

It seems users should avoid purchasing Godaddy SSL certs until they get serious about being a CA.

如果您愿意致电以下是他们的SSL小组的联系信息:

GoDaddy SSL Team Support Number: 1-480-505-8852 -- Email: ra@godaddy.com

2014年9月17日更新-这仍然是一个问题,Godaddy似乎不在乎也不会对此做任何事情。当Google在11月弃用所有SHA-1证书时,这将成为一个主要问题。我强烈建议任何可以联系Godaddy并将其指向此处的人。

tl;dr; - final update with current solution/workaround at the bottom of this post (it is a GoDaddy problem and there is a workaround until they fix it)

我有一个邮件服务器,试图从Java应用程序发送邮件。我可以在端口25上成功发送,因此我知道代码可以正常工作,但是25不是加密的会话。我需要在需要SSL证书的端口587上使用TLS。我在由GoDaddy G2 CA签名的服务器上有一个有效的SSL证书,并且已经放置了一段时间(没有问题)。

我的问题是PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target,尝试在587上连接和发送邮件时,我收到了著名的错误消息。

根据我对许多SO链接以及普通google-fu的理解,这通常是Java不信任证书或CA时引起的-这是自签名证书的常见现象。我已经使用了几个在线SSL证书检查器来确保该链是有效的,等等。所有这些看起来都是正常的……但是java不会自动使用该证书。

我知道Sun某个地方有一个类文件,该文件将在本地密钥库中下载并设置证书,因此Java会信任它...但这不仅对于将部署到多个系统的应用程序不切实际,对于Godaddy签名证书很傻。

这是怎么回事?如何使Java使用服务器上的有效证书,不必使Java接受所有证书?

编辑:我只是看了我的Windows Java控制面板(jdk 7的默认安装),并且肯定,在Signer CA发行者:The Go Daddy Group, Inc. Go Daddy Class 2 Certification Authority下列出了...那么,给出了什么呢?我的证书是Godaddy证书...

UPDATE --

这是注释中推荐的openssl命令所见的证书链:

~]# openssl s_client -connect smtp.somecompany.com:587 -starttls smtp
CONNECTED(00000003)
depth=2 C = US, ST = Arizona, L = Scottsdale, O = "GoDaddy.com, Inc.", CN = Go Daddy Root Certificate Authority - G2
verify error:num=19:self signed certificate in certificate chain
verify return:0
---
Certificate chain
 0 s:/OU=Domain Control Validated/CN=smtp.somecompany.com
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
 1 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy Root Certificate Authority - G2
 2 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy Root Certificate Authority - G2
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy Root Certificate Authority - G2
 3 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy Root Certificate Authority - G2
---

我认为我看起来还不错...

UPDATE 2 --

好的,感谢@Bruno,我能够确定我的链条被弄乱了—我重新设置了服务器的密钥,现在我的链条显示为:

 ~]# openssl s_client -connect smtp.somecompany.com:587 -starttls smtp
CONNECTED(00000003)
depth=2 C = US, ST = Arizona, L = Scottsdale, O = "GoDaddy.com, Inc.", CN = Go Daddy Root Certificate Authority - G2
verify error:num=19:self signed certificate in certificate chain
verify return:0
---
Certificate chain
 0 s:/OU=Domain Control Validated/CN=smtp.somecompany.com
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
 1 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy Root Certificate Authority - G2
 2 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy Root Certificate Authority - G2
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy Root Certificate Authority - G2
---

看起来比以前更好。-Java仍然对证书路径等抛出相同的异常。因此,默认情况下,似乎在Java 7的默认密钥库中仍不信任G2证书链。

FINAL UPDATE FOR COMPLETENESS @ 1/14/2014

就像一个更新一样-这确实是GoDaddy的问题(​​我已经收到了很长的支持电子邮件)。它们有2个CA服务器,一个称为Class 2 CA,另一个称为G2 CA他们在Class 2 CA所有SHA-1证书上签名,同时在他们所有的证书上G2 CA签名SHA-2这就是问题所在-GoDaddy尚未将其新G2 CA服务器添加到默认的Java信任库中-导致默认的Java安装不信任它的权限,因此不信任您的链接证书。在GoDaddy将G2 CA服务器添加到默认信任库之前,解决方法是简单地使用SHA-1as来对证书进行密钥更新,以获取Class 2 CA服务器签名的证书在您的证书过期之前(显然),GoDaddy客户可以免费重新键入密码。

UPDATE 1/26/2015 -- It appears the most recent JRE/JDK for Java 8 (update >= 31) and JRE/JDK for Java 7 now include the Godaddy G2 CA server in the default trust store. If possible, it's urged you upgrade your JRE/JDK to the latest Java 8 update to resolve this issue.

2014年11月29日更新-这仍然是一个问题,Godaddy似乎不在乎也不会对此做任何事情。[here][1]Godaddy安全产品副总裁几个月前发表了一篇博客文章,指出正在修复该问题,并提供了一种临时解决方法,但到目前为止,没有任何变化。请务必注意,Godaddy的G2 CA服务器已经存在至少5年了,在那段时间,Godaddy尚未采取适当的步骤来解决此已知问题。提供的解决方法仅是一种解决方法,而不是解决方案。第三方服务的用户对证书在服务器上的安装方式几乎没有任何控制。

It seems users should avoid purchasing Godaddy SSL certs until they get serious about being a CA.

如果您愿意致电以下是他们的SSL小组的联系信息:

GoDaddy SSL Team Support Number: 1-480-505-8852 -- Email: ra@godaddy.com

2014年9月17日更新-这仍然是一个问题,Godaddy似乎不在乎也不会对此做任何事情。当Google在11月弃用所有SHA-1证书时,这将成为一个主要问题。我强烈建议任何可以联系Godaddy并将其指向此处的人。

~~~~

我最初的帖子/问题是关于为什么我的连锁店不起作用。显而易见,我的设置不好(通过@Bruno等人的一些建议很快将其修复-谢谢)。但是,当我更正的链仍然无法使用Java时,很明显潜伏着一个更大的问题。花了一段时间,但问题实际上出在GoDaddy上。

实际上,这确实是GoDaddy的问题(​​我已经收到了很长的支持电子邮件)。

它们有2个CA服务器,一个称为Class 2 CA,另一个称为G2 CA他们在Class 2 CA所有SHA-1证书上签名,同时在他们所有的证书上G2 CA签名SHA-2

这就是问题所在-GoDaddy尚未将其新G2 CA服务器添加到默认服务器Java truststore/keystore-导致默认Java安装不信任它的权限,因此不信任您的链接证书。

GoDaddy将G2 CA服务器添加到默认信任库/密钥库之前的解决方法是,仅使用SHA-1as来对证书进行密钥更新,以获取Class 2 CA服务器签名的证书在您的证书过期之前(显然),GoDaddy客户可以免费重新键入密码。

一旦服务器SHA-1签署证书Class 2 CA,您的信任链就会按预期工作,并且不需要自定义信任库/密钥库导入和/或设置。

我必须使用“更弱”的证书才能使其正常运行并不能使我感到高兴,到目前为止,通过电子邮件支持与GoDaddy进行的讨论表明,他们目前尚无将G2 CA服务器添加到默认信任库/密钥库的计划。 。我猜想直到他们添加它之前,SHA-1 Class 2 CA如果您打算使用Java ,请确保获得服务器签名的证书。

Fixer先生和Wayne Thayer的答案都被否决了,但他们实际上是在主张正确的解决方法。实际上,韦恩·塞耶(Wayne Thayer)领导了GoDaddy的SSL业务,因此他可能知道。您应该在证书链中安装“ GoDaddy G1到G2交叉”证书以及中间证书。

降级到SHA1并不是一个理想的选择,因为它已被弃用,将来会导致您需要做更多的工作。幸运的是,GoDaddy提供了可解决此问题的交叉证书。他们张贴了Wayne复制的说明,并将其埋在此处的注释中

我已经使用SHA2证书亲自测试了该解决方案,并且效果很好。与重新键入密钥和降级到SHA1相比,这是一个非常出色的解决方案。当需要使用SHA2时,此选项将始终不可用,并且可能仍然存在没有新证书的Java工具链。

根据GoDaddy的支持,截至2014年7月,正确的根证书已包含在Java 8的最新版本中。2014年9月,GoDaddy的Wayne Thayer还表示,该证书“计划在未来几个月内添加到Java中”。 ”。我已经检查了从此处下载的Java 8 for Mac OS中的cacerts文件,它确实包含SHA2根证书。

因此,而不是像这样的链:

  • Go Daddy根证书颁发机构– G2:(SHA-2)–哈希47 BE AB C9 22 EA E8 0E 78 78 34 62 A7 9F 45 C2 54 FD E6 8B。这是某些系统(例如Chrome)内置的根证书。SnakeDoc声称“它没有内置在Java,Windows CE,Microsoft Exchange和更多平台中”。
  • Go Daddy安全证书颁发机构– G2:(SHA-2)–哈希27 AC 93 69 FA F2 52 07 BB 26 27 CE FA CC BE 4E F9 C3 19 B8
  • 您的SHA2证书

它看起来应该像这样:

  • Go Daddy 2级证书颁发机构:(SHA-1)–哈希27 96 BA E6 3F 18 01 E2 77 26 1B A0 D7 77 70 02 8F 20 EE E4。这是大多数系统(包括Java)中内置的旧根证书。
  • Go Daddy根证书颁发机构– G2:(SHA-2)–哈希34 0B 28 80 F4 46 FC C0 4E 59 ED 33 F5 2B 3D 08 D6 24 2964。这就是所谓的“ GoDaddy G1到G2交叉证书”。 。
  • Go Daddy安全证书颁发机构– G2:(SHA-2)–哈希27 AC 93 69 FA F2 52 07 BB 26 27 CE FA CC BE 4E F9 C3 19 B8
  • 您的SHA-2证书

另请参阅-我的博客文章中概述了此问题以及解决方法。

若要使Godaddy证书在SHA2上与Java一起使用,您需要在链中使用其交叉证书将G2(SHA2)根链接到G1(SHA1)根,直到Java决定更新其存储库为止。交叉证书捆绑包可在此处下载:

https://certs.godaddy.com/anonymous/repository.pki

GoDaddy证书捆绑包-G2与G1交叉,包括根

[gd_bundle-g2-g1.crt][1] 

Fixer先生是对的。将证书包文件中的“ GoDaddy G1到G2交叉”证书与中间证书一起安装。这样,任何可识别SHA-1根目录(包括Java)的客户端都可以信任GoDaddy SHA-2证书。您可以从https://certs.godaddy.com/repository获得此文件。安装此文件后,Java将构建证书链,从您的证书到“ GoDaddy安全服务器证书(中间证书)”再到“ GoDaddy G1到G2”交叉证书”到GoDaddy SHA-1根目录。您还可以在我们的存储库中找到包含交叉证书的捆绑文件。关于此选项的最后一点说明:不检查根证书上的签名,因此即使您依赖SHA-1根,

以下评论和的输出openssl s_client -connect the.server.name:587 -starttls smtp

在证书链中,证书n应该由列表中的证书n + 1颁发:证书n的颁发者(i)应该是证书n + 1的主题。

 0 s:/OU=Domain Control Validated/CN=smtp.somecompany.com
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
 1 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy Root Certificate Authority - G2
 2 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy Root Certificate Authority - G2
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy Root Certificate Authority - G2
 3 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy Root Certificate Authority - G2

此处,cert 0由cert 1(精细)颁发,cert 1由cert 2(精细)颁发,cert 2是自签名的(也很好,这是根CA)。

但是,证书2不是由证书3颁发的。证书3放错了位置(可能与证书1相同)。这很可能引起问题,因为这会使链无效。

您至少应从配置中删除证书3。此外,您也可以删除cert 2,因为不必具有根CA(取决于客户端是否知道该证书)。

如果将de GoDady G2捆绑包导入到Java密钥库中,则可以解决此问题:

export JAVA_HOME=/usr/lib/jvm/java-8-oracle/
wget https://certs.godaddy.com/repository/gd_bundle-g2.crt
$JAVA_HOME/bin/keytool -import -alias root -file ./gd_bundle-g2.crt -storepass changeit -trustcacerts -keystore $JAVA_HOME/jre/lib/security/cacerts

听起来您的邮件服务器未由签名Go Daddy Class 2 Certification Authority,但实际上是由其中间证书颁发机构之一签名的。您将需要自己验证。假设是这种情况...

从理论上讲,您的软件应该可以工作-因为中间证书是由2类权限签名的,并且您在默认JDK证书存储区中具有2类权限。但是,我发现除非您也将中间证书添加到证书存储中,否则它将无法正常工作。这是描述类似体验的博客文章的链接:

http://drcs.ca/blog/adding-godaddy-intermediate-certificates-to-java-jdk/

这是更多GoDaddy中间证书的直接链接:https :
//certs.godaddy.com/anonymous/repository.pki

我不能确切建议您必须添加哪个证书-这取决于您的邮件服务器中使用了哪个CA。

[更新]

is there a way to do this programmically?

也许。取决于您要做什么。我已经使用java.security.KeyStore该类直接从Java代码自动更新私有密钥库,而无需使用keytool从概念上讲,它很简单-从文件加载密钥库,读取新证书,将其添加到密钥库,然后将密钥库写出到新文件。但是,要花一些时间才能正确获取详细信息,仅导入单个证书可能就不值得麻烦。

不过,尝试还是很有趣的。结帐的KeyStore的JavaDoc和在读了loadstoresetCertificateEntry方法。

在“ Java控制面板”中,我仅将GD根证书添加到“安全站点CA”,并且在使用Java时不再出现证书错误。我添加的证书是:
Go Daddy 2级证书颁发机构根证书-G2

Update - this "solution" is no longer valid (see my above accepted answer) - keeping this answer because it did help alleviate the problem so long as the side-effects are tolerable.

好的,我可能已经找到适合我的情况的解决方法。

props.put("mail.smtp.ssl.trust", "smtp.somecompany.com");

我将此添加到了Session结构中,现在可以使用了。这是一种变通方法,而不是修复恕我直言,因为我仍然不知道为什么我的Godaddy SSL证书不是默认受信任的...它不是自签名证书。

任何人都可以随意鸣叫,因为我真的很想了解这个问题。

这是您可以尝试的。在运行时将GoDaddy根证书和中间证书添加到信任管理器。即启动该应用程序。

静态最后弦乐GD_CERT1 = // “----- BEGIN CERTIFICATE -----” “MIIE0DCCA7igAwIBAgIBBzANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx” + “EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT” + “EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp” + “ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTExMDUwMzA3MDAwMFoXDTMxMDUwMzA3” + “MDAwMFowgbQxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH” + “EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjEtMCsGA1UE” + “CxMkaHR0cDovL2NlcnRzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkvMTMwMQYDVQQD” +” EypHbyBEYWRkeSBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IC0gRzIwggEi“ +” MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC54MsQ1K92vdSTYZZ“BNliF44v / z5lz4 / OYuY8UhzaFkVLVat4a2ODYpDOD2lsmcgaFItMzEUz6ojcnqOv” + “K / 6AYZ15V8TPLvQ / MDxdR / yaFrzDN5ZBUY4RS1T4KL7QjL7wMDge87Am + GZHY23e” + “cSZHjzhHU9FGHbTj3ADqRay9vHHZqm8A29vNMDp5T19MR / gd71vCxJ1gO7GyQ5HY” + “pDNO6rPWJ0 + tJYqlxvTV0KaudAVkV4i1RFXULSo6Pvi4vekyCgKUZMQWOlDxSq7n” + “eTOvDCAHf + jfBDnCaQJsY1L6d8EbyHSHyLmTGFBUNUtpTrw700kuH9zB0lL7AgMB” + “AAGjggEaMIIBFjAPBgNVHRMBAf8EBTADAQH / MA4GA1UdDwEB / wQEAwIBBjAdBgNV” + “HQ4EFgQUQMK9J47MNIMwojPX + 2yz8LQsgM4wHwYDVR0jBBgwFoAUOpqFBxBnKLbv” + “9r0FQW4gwZTaD94wNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8v” + “b2NzcC5nb2RhZGR5LmNvbS8wNQYDVR0fBC4wLDAqoCigJoYkaHR0cDovL2NybC5n” + “b2RhZGR5LmNvbS9nZHJvb3QtZzIuY3JsMEYGA1UdIAQ / MD0wOwYEVR0gADAzMDEG” +”CCsGAQUFBwIBFiVodHRwczovL2NlcnRzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkv” + “MA0GCSqGSIb3DQEBCwUAA4IBAQAIfmyTEMg4uJapkEv / oV9PBO9sPpyIBslQj6Zz” + “91cxG7685C / B + LrTW + C05 + Z5Yg4MotdqY3MxtfWoSKQ7CC2iXZDXtHwlTxFWMMS2” + “RJ17LJ3lXubvDGGqv + QqG + 6EnriDfcFDzkSnE3ANkR / 0yBOtg2DZ2HKocyQetawi” + “DsoXiWJYRBuriSUBAA / NxBti21G00w9RKpv0vHP8ds42pM3Z2Czqrpv1KrKQ0U11” + “GIO / ikGQI31bS / 6kA1ibRrLDYGCD + H1QQc7CoZDDu + 8CL9IVVO5EFdkKrqeKM + 2X” +“ LXY2JtwE65 / 3YR8V3Idv7kaWKK2hJn0KCacuBKONvPi8BDAB”; // +“ -----结束证书-----”;RJ17LJ3lXubvDGGqv + QqG + 6EnriDfcFDzkSnE3ANkR / 0yBOtg2DZ2HKocyQetawi “+ ”DsoXiWJYRBuriSUBAA / NxBti21G00w9RKpv0vHP8ds42pM3Z2Czqrpv1KrKQ0U11“ + ”GIO / ikGQI31bS / 6kA1ibRrLDYGCD + H1QQc7CoZDDu + 8CL9IVVO5EFdkKrqeKM + 2X“ + ”LXY2JtwE65 / 3YR8V3Idv7kaWKK2hJn0KCacuBKONvPi8BDAB“; // +” ----- END CERTIFICATE ---- -”;RJ17LJ3lXubvDGGqv + QqG + 6EnriDfcFDzkSnE3ANkR / 0yBOtg2DZ2HKocyQetawi “+ ”DsoXiWJYRBuriSUBAA / NxBti21G00w9RKpv0vHP8ds42pM3Z2Czqrpv1KrKQ0U11“ + ”GIO / ikGQI31bS / 6kA1ibRrLDYGCD + H1QQc7CoZDDu + 8CL9IVVO5EFdkKrqeKM + 2X“ + ”LXY2JtwE65 / 3YR8V3Idv7kaWKK2hJn0KCacuBKONvPi8BDAB“; // +” ----- END CERTIFICATE ---- -”;

static final String GD_CERT2 =
//"-----BEGIN CERTIFICATE-----"
"MIIEfTCCA2WgAwIBAgIDG+cVMA0GCSqGSIb3DQEBCwUAMGMxCzAJBgNVBAYTAlVT"
+"MSEwHwYDVQQKExhUaGUgR28gRGFkZHkgR3JvdXAsIEluYy4xMTAvBgNVBAsTKEdv"
+"IERhZGR5IENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTQwMTAx"
+"MDcwMDAwWhcNMzEwNTMwMDcwMDAwWjCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT"
+"B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHku"
+"Y29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1"
+"dGhvcml0eSAtIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv3Fi"
+"CPH6WTT3G8kYo/eASVjpIoMTpsUgQwE7hPHmhUmfJ+r2hBtOoLTbcJjHMgGxBT4H"
+"Tu70+k8vWTAi56sZVmvigAf88xZ1gDlRe+X5NbZ0TqmNghPktj+pA4P6or6KFWp/"
+"3gvDthkUBcrqw6gElDtGfDIN8wBmIsiNaW02jBEYt9OyHGC0OPoCjM7T3UYH3go+"
+"6118yHz7sCtTpJJiaVElBWEaRIGMLKlDliPfrDqBmg4pxRyp6V0etp6eMAo5zvGI"
+"gPtLXcwy7IViQyU0AlYnAZG0O3AqP26x6JyIAX2f1PnbU21gnb8s51iruF9G/M7E"
+"GwM8CetJMVxpRrPgRwIDAQABo4IBFzCCARMwDwYDVR0TAQH/BAUwAwEB/zAOBgNV"
+"HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9BUFuIMGU2g/eMB8GA1Ud"
+"IwQYMBaAFNLEsNKR1EwRcbNhyz2h/t2oatTjMDQGCCsGAQUFBwEBBCgwJjAkBggr"
+"BgEFBQcwAYYYaHR0cDovL29jc3AuZ29kYWRkeS5jb20vMDIGA1UdHwQrMCkwJ6Al"
+"oCOGIWh0dHA6Ly9jcmwuZ29kYWRkeS5jb20vZ2Ryb290LmNybDBGBgNVHSAEPzA9"
+"MDsGBFUdIAAwMzAxBggrBgEFBQcCARYlaHR0cHM6Ly9jZXJ0cy5nb2RhZGR5LmNv"
+"bS9yZXBvc2l0b3J5LzANBgkqhkiG9w0BAQsFAAOCAQEAWQtTvZKGEacke+1bMc8d"
+"H2xwxbhuvk679r6XUOEwf7ooXGKUwuN+M/f7QnaF25UcjCJYdQkMiGVnOQoWCcWg"
+"OJekxSOTP7QYpgEGRJHjp2kntFolfzq3Ms3dhP8qOCkzpN1nsoX+oYggHFCJyNwq"
+"9kIDN0zmiN/VryTyscPfzLXs4Jlet0lUIDyUGAzHHFIYSaRt4bNYC8nY7NmuHDKO"
+"KHAN4v6mF56ED71XcLNa6R+ghlO773z/aQvgSMO3kwvIClTErF0UZzdsyqUvMQg3"
+"qm5vjLyb4lddJIGvl5echK1srDdMZvNhkREg5L4wn3qkKQmw4TRfZHcYQFHfjDCm"
+"rw==";
//+"-----END CERTIFICATE-----";

static final String GD_CERT3 =
//"-----BEGIN CERTIFICATE-----"
"MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh"
+"MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE"
+"YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3"
+"MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo"
+"ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg"
+"MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN"
+"ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA"
+"PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w"
+"wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi"
+"EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY"
+"avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+"
+"YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE"
+"sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h"
+"/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5"
+"IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj"
+"YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD"
+"ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy"
+"OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P"
+"TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ"
+"HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER"
+"dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf"
+"ReYNnyicsbkqWletNw+vHX/bvZ8=";
//+"-----END CERTIFICATE-----";

公共静态void main(String [] args)引发异常{

    TrustManagerFactory dtmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    dtmf.init((KeyStore) null); // gets you the default trust manager


    X509TrustManager defaultTm = null;
    for (TrustManager tm : dtmf.getTrustManagers()) 
    {
        if (tm instanceof X509TrustManager) 
        {
            defaultTm = (X509TrustManager) tm;
            break;
        }
    }


    CertificateFactory cf = CertificateFactory.getInstance("X.509");
    byte [] decoded = Base64.getDecoder().decode(GD_CERT1);
    ByteArrayInputStream in = new ByteArrayInputStream(decoded);
    Certificate ca1 = cf.generateCertificate(in);
    in.close();

    decoded = Base64.getDecoder().decode(GD_CERT2);
    in = new ByteArrayInputStream(decoded);
    Certificate ca2 = cf.generateCertificate(in);
    in.close();

    decoded = Base64.getDecoder().decode(GD_CERT3);
    in = new ByteArrayInputStream(decoded);
    Certificate ca3 = cf.generateCertificate(in);
    in.close();

    String keyStoreType = KeyStore.getDefaultType();
    KeyStore ks = KeyStore.getInstance(keyStoreType);
    ks.load(null, null);
    ks.setCertificateEntry("cert1", ca1);
    ks.setCertificateEntry("cert2", ca2);
    ks.setCertificateEntry("cert3", ca3);


    TrustManagerFactory gdtmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    gdtmf.init(ks);

    X509TrustManager gdTm = null;
    for (TrustManager tm : gdtmf.getTrustManagers()) 
    {
        if (tm instanceof X509TrustManager) 
        {
            gdTm = (X509TrustManager) tm;
            break;
        }
    }

    TrustManager tms[] = new TrustManager[2];
    tms[0] = gdTm;
    tms[1] = defaultTm;


    try 
    {
         SSLContext sslCtx = SSLContext.getInstance("TLS");
        sslCtx.init(null, tms, new SecureRandom());
    } 
    catch (java.security.GeneralSecurityException e) 
    {
        e.printStackTrace();
        throw e;
    }

     HttpsURLConnection.setDefaultSSLSocketFactory(sslCtx.getSocketFactory());
}

我从工作版本中复制了代码。因此可能会出现并发症错误。您只需要完成这些工作即可。

如果您在发送邮件时使用以下属性,请对其进行注释。这对我有用。但这可能会导致安全问题。

props.put("mail.smtp.starttls.enable","true");
本文地址:http://java.askforanswer.com/godaddy-sslzhengshubushiyongyujava.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!