Как исправить неполную цепочку SSL

29

У меня установлен сертификат Go Daddy SSL, и он отлично работает везде, кроме Android.

https://www.ssllabs.com/ssltest/analyze.html говорит, что цепочка неполная, и я прочитал о переполнении стека, что цепочка SSL в неправильном порядке не будет работать на Android.

Но как мне это привести в порядок? На моем сервере? Сертификат SSL сам по себе должен быть повторно введен? Переместить вещи по FTP?

Джон
источник

Ответы:

19

После ответа на вопрос zakjan у меня возникла проблема, когда я пытался использовать jquery для выполнения запроса AJAX на моем новом защищенном сервере в веб-представлении Android. Это работало в браузере, но не в моем приложении.

Я использовал этот сайт: https://certificatechain.io/

Я вставил текст моего подписанного файла .crt, который я получил от Comodo (positiveSSL), и он вернул мне объединение всего, что мне было нужно. Я сохранил его как мой домен + "chain.crt" (см. Ниже)

Затем в своих конфигурациях apache я ввел что-то подобное для этого конкретного виртуального хоста:

SSLEngine On
SSLCertificateFile /etc/ssl/localcerts/example_com.crt
SSLCertificateKeyFile /etc/ssl/localcerts/example.com.key
SSLCACertificateFile /etc/ssl/localcerts/example.com.chain.crt

После этого у моего веб-приложения для Android не было проблем с использованием ajax для POST на моем сервере. Я попробовал это на 2 реальных устройствах, одно работает под управлением 2.3.4, другое работает под управлением чего-то. И на эмуляторе работает 2.3. Все сработало.

Надеюсь, это поможет.

Ричард
источник
1
Ключом для меня было добавление SSLCACertificateFileдирективы и указание ее в CA-файле, который мне дали мои полномочия. Это не сработает, если я просто соединю другие сертификаты с моим файлом сертификатов.
Алекс W
В старых апахах вместо SSLCACertificateFile можно было использовать SSLCertificateChainFile (на тот случай, если вы ищете этот ключ в своих конфигах и не можете его найти).
dr0i
Невероятно, но в ответе @Richard используется сайт certificatechain.io, и на сайте написано: «... вдохновлен cert-chain-resolver Яном Чаком», который ответил на этот вопрос здесь: superuser.com/a/866523/92500 , спасибо @zakjan!
Андрес Моралес
Это SSLCACertificateFileбыла линия, которую я пропустил. Первоначально я предполагал, что мой CA был слишком новым, потому что SSL работал при запросе от некоторых браузеров / ОС, но не от других. Использование decoder.link/sslchecker помогло уточнить, что мой конфиг был неверным, и этот ответ был исправлен. Спасибо!!
Josephdpurcell
9

Цепочка была в файле crt, что оригинальный SSL работал.

Для GoDaddy есть 2-й сертификат - gd_bundle.crt

Скопируйте эту информацию и добавьте ее в crt, установленный на сервере.

Таким образом, исходный crt на сервере имел 1 сертификат, а после него будет 3 на тот же файл. Это цепь.

У меня все еще есть якорь в цепях на ssllabs.com, но это не проблема, просто возможность оставить или выйти - согласно - /security/24561/ssltest-chain-issues -contains якорь / 24566 # 24566

Джон
источник
2
Чтобы избавиться от проблем с цепочкой, удалите последний сертификат из gd_bundle.crt
sanmai
7

Вы можете решить проблему неполной цепочки сертификатов вручную, объединив все сертификаты от сертификата до доверенного корневого сертификата (исключительно в этом порядке), чтобы предотвратить такие проблемы. Обратите внимание, что доверенный корневой сертификат не должен быть там, поскольку он уже включен в хранилище корневых сертификатов системы.

Вы должны быть в состоянии получить промежуточные сертификаты от эмитента и объединить их вместе самостоятельно. Кстати, я написал скрипт для автоматизации процедуры, он требует сертификат для выдачи правильно цепочечных сертификатов. https://github.com/zakjan/cert-chain-resolver

zakjan
источник
Это похоже на решение, которое только «обманывает» локальную машину, заставляя думать, что сертификат настроен правильно.
Алекс W
Нет. Предполагается, что выходной пакет сертификатов должен быть загружен на сервер, который отправляет содержимое веб-сайта. Каждый клиент получит сертификат со своими посредниками.
zakjan