Сертификат GoDaddy SSL не работает с Java

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.

ОБНОВЛЕНИЕ 29.11.2014 - Это все еще проблема, и Годэдди, кажется, не заботится и не будет ничего с этим делать. Есть запись в блогеВот Вице-президент по безопасности продуктов Godaddy несколько месяцев назад сказал, что исправление былоs и предоставил временный обходной путь, но на сегодняшний день ничего не изменилось. Важно отметить, что 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: [email protected]

ОБНОВЛЕНИЕ 17.09.2014 - Это все еще проблема, и Godaddy, кажется, не заботится, и не будет ничего с этим делать. В ноябре, когда Google откажется от всех сертификатов 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 не зашифрованный сеанс. Мне нужно использовать TLS на порту 587, который требует сертификат SSL. У меня есть действующий сертификат SSL на сервере, который подписан GoDaddy G2 CA и уже некоторое время используется (без проблем).

Моя проблема, яЯ получаю знаменитый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 --

Вот's цепочка сертификатов, как видно из команды 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 по-прежнему выдает то же исключение в отношении пути сертификата и т. Д. Таким образом, похоже, что цепочка сертификатов G2 по умолчанию еще не является доверенной в Java 7 'хранилище ключей по умолчанию.

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-1 как получить сертификат, подписанныйClass 2 CA сервер. Перепродажа бесплатна для клиентов GoDaddy до истечения срока действия вашего сертификата (очевидно).

Ответы на вопрос(11)

Ваш ответ на вопрос