GoDaddy SSL证书不使用Java

Sna*_*Doc 56 java ssl jakarta-mail zimbra

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似乎不关心也不会做任何事情.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不是加密会话.我需要在端口587上使用TLS,这需要SSL证书.我在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
---
Run Code Online (Sandbox Code Playgroud)

我认为对我好看......

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
---
Run Code Online (Sandbox Code Playgroud)

哪个看起来比以前更好. - 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客户可以免费更换密码.

Sna*_*Doc 44

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似乎不关心也不会做任何事情.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-1Class 2 CA服务器签署了证书,您的信任链应该按预期工作,并且不需要自定义信任库/密钥库导入和/或设置.

我不得不高兴我必须使用"弱"证书才能使其正常工作,到目前为止与GoDaddy通过电子邮件支持进行的讨论表明他们目前没有计划将G2 CA服务器添加到默认的truststore/keystore .我想直到他们确实添加它,SHA-1 Class 2 CA如果你打算使用Java ,请确保获得服务器签名证书.

  • 我刚刚收到GoDaddy发来的一封电子邮件,说我应该将我的ssl证书重新安排到SHA-2,这样它将在11月之后继续与Chrome完美配合.但是,在这样做时,它将使用G2 CA而不是Class 2 CA,这将导致它因Java而失败.怎么办,怎么办? (3认同)
  • 当我们的Windows Mobile 6.5设备无法通过我们的网络服务进行身份验证时,此解决方案对我有用.非常感谢你的帮助 (2认同)
  • 我看到了与@ Brian2000相同的消息.GoDaddy在Chrome上逐步淘汰SHA-1的详细信息如下:https://garage.godaddy.com/webpro/security/google-chrome-phasing-ssl-certs-using-sha-1/我们可能遇到麻烦,除非GoDaddy很快将他们的G2 CA服务器添加为默认的Java信任库/密钥库. (2认同)

Isa*_*nes 19

Fixer先生和Wayne Thayer先生的答案被低估了,但他们实际上是在倡导正确的解决方案.事实上,Wayne Thayer领导GoDaddy的SSL业务,所以他可能知道.您应该在证书链中安装"GoDaddy G1到G2 Cross"证书以及中间证书.

降级为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根证书.

所以不是你的链看起来像这样:

  • 去爸爸根证书颁发机构 - 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 Class 2证书颁发机构:(SHA-1) - 哈希27 96 BA E6 3F 18 01 E2 77 26 1B A0 D7 77 70 02 8F 20 EE E4.这是大多数系统中内置的旧根证书,包括java.
  • 去爸爸根证书颁发机构 - G2:(SHA-2) - 哈希34 0B 28 80 F4 46 FC C0 4E 59 ED 33 F5 2B 3D 08 D6 24 29 64.这就是所谓的"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有合法的问题,但请不要把它带给我或者来这里寻找可行解决方案的人.降级为SHA1的最高投票解决方案是不安全的,并且与SHA1弃用不向前兼容.我同意根CA需要进入Java,但服务器端解决方法是处理已经没有证书的Java版本的唯一方法.请停止对发布GoDaddy已发布的解决方法的人进行投票. (5认同)

小智 13

要使用SHA2使用Godaddy证书在Java中工作,您需要使用链中的交叉证书将G2(SHA2)根链接到G1(SHA1)根,直到Java决定更新其存储库.可以在此处下载交叉证书包:

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

GoDaddy证书包 - G2与Cross到G1,包括Root

[gd_bundle-g2-g1.crt][1] 
Run Code Online (Sandbox Code Playgroud)


小智 11

Fixer先生是对的.在证书包文件中安装"GoDaddy G1到G2 Cross"证书以及中间证书.这允许任何识别SHA-1根(包括Java)的客户端信任GoDaddy SHA-2证书.您可以从https://certs.godaddy.com/repository获取此文件安装完成后,Java将构建一个证书链,从证书到"GoDaddy安全服务器证书(中级证书)"到"GoDaddy G1到G2"交叉证书"到GoDaddy SHA-1根目录.您还可以在我们的存储库中找到包含交叉证书的捆绑文件.关于此选项的最后一点注意事项:未检查根证书上的签名,因此即使您依赖SHA-1根,这也与完整的SHA-2证书链一样安全.