Добавление промежуточных сертификатов в файл pkcs12

У меня есть сертификат, имеющий следующую цепочку сертификации: Entrust- > Мой CA- > Мой сертификат CA- > My JBoss. Теперь, если я установлю свой сертификат на свой экземпляр JBoss, любая страница, которую я запускаю на этом экземпляре, будет казаться ненадежной, так как мой выдающий СА не распознается моим браузером. Я знаю, что у моего компьютера есть открытый ключ для полномочий подписи Entrust. Как установить сертификат, чтобы любой браузер мог видеть всю цепочку сертификатов?

Я сделал один файл .pem всех сертификатов, которые будут работать. Это не так. Может ли кто-нибудь объяснить, что я делаю неправильно или даже если это возможно?

Ответы

Ответ 1

Добавление промежуточных сертификатов в файл pkcs12...

Вот как я это делаю на своих веб-серверах и почтовых серверах.

Во-первых, www-example-com.crt - это сертификат веб-сервера, подписанный Startcom. Startcom предлагает бесплатные сертификаты класса 1, которым доверяют большинство моих браузеров и мобильных устройств, поэтому я их использую. Сертификат находится в формате PEM (----- BEGIN CERT ----- и ----- END CERT -----).

Во-вторых, я открываю www-example-com.crt и добавляю Startcom Class 1 Intermediate. Я получаю промежуточное звено от Startcom Индекс /certs. Теперь мой www-example-com.crt имеет два закодированных в PEM закодированных сертификатах.

В-третьих, я выполняю следующие действия для создания файла PKCS12/PFX для использования в IIS.

openssl pkcs12 -export -in www-example-com.crt -inkey www.example.key -out www-example-com.p12

В вашем случае ваш www-example-com.crt будет иметь в нем как минимум три сертификата PEM:

----- BEGIN CERT -----
< My JBoss Certificate >
----- END CERT -----

----- BEGIN CERT -----
< My Issuing CA >
----- END CERT -----

----- BEGIN CERT -----
< My CA >
----- END CERT -----

Третий сертификат в цепочке - My CA - является необязательным. Это вам не нужно, если ваши клиенты используют My CA в качестве якоря доверия. Если вы используете клиентов Entrust как привязку доверия, тогда вам нужно будет включить его.

Если вы cat ваш www-example-com.crt и у него нет нескольких сертификатов, не продолжайте. Не выполняйте openssl pkcs12, пока ваш серверный сертификат не получит все необходимые промежуточные сертификаты, необходимые для проверки цепочки.

Не включайте сертификат CA Entrust.


Я сомневаюсь, что знаки Entrust с их CA напрямую. Вероятно, они тоже используют промежуточное звено. Поэтому ваша цепочка сертификатов должна выглядеть так:

----- BEGIN CERT -----
< My JBoss Certificate >
----- END CERT -----

----- BEGIN CERT -----
< My Issuing CA >
----- END CERT -----

----- BEGIN CERT -----
< My CA >
----- END CERT -----

----- BEGIN CERT -----
< Entrust Intermediate >
----- END CERT -----

Entrusts предоставляет сертификаты CA и Intermediate в сертификатах Entrust Root. Я не могу сказать вам, какой из них вам нужен, потому что вы не укажете URL-адрес или не покажете нам цепочку, которую у вас есть. Но я предполагаю, что это будет один или несколько из:

  • Доверяйте сертификат цепи L1E
  • Доверяйте сертификат цепи L1C
  • Доверять сертификат цепи L1E (SHA2)
  • Доверять сертификат цепи L1C (SHA2)

Вы можете проверить свою цепочку с помощью OpenSSL `s_client. На этот раз вы будете использовать Entrust certifcate:

echo -e "GET / HTTP/1.0\r\n" | openssl s_client -connect myserver:8443 \
                                       -CAfile entrust-ca.pem

Вы можете получить entrust-ca.pem из Доверенных корневых сертификатов. Запустите его и сообщите нам, какие ошибки вы получите. Или лучше, разместите URL-адрес вашего сервера, чтобы мы могли видеть, что происходит.

Ответ 2

У меня есть сертификат, который имеет следующую цепочку сертификации: Entrust- > My CA- > Мой выдающий CA- > My JBoss Certificate....

Думаю, у вас есть две проблемы. Во-первых, это СЗС, а вторая - незавершенная цепочка клиентов.

Во-первых, простая проблема. Сервер должен отправить сертификат конечной сущности (сервера) и любые промежуточные сертификаты, необходимые для сборки цепочки. Сервер отправляет промежуточные сертификаты, чтобы избежать проблемы с каталогом. "Какая директория" является хорошо известной проблемой в PKI. По сути, клиент не знает, куда идти, чтобы получить отсутствующий промежуточный сертификат.

Итак, ваше первое решение заключается в том, что сервер отправляет цепочку с помощью:

  • Ваш промежуточный сертификат ( "Мой выдающий CA" )
  • Сертификат сервера ('My JBoss Certificate')

Во-вторых, у вас есть проблема ненадежного эмитента. Клиент должен доверять вашему внутреннему ЦС выдачи.

Итак, ваше второе решение - обеспечить, чтобы ваш клиент доверял вашему внутреннему ЦС ( "Мой ЦС" ). В этом случае клиенту не требуется даже использовать Entrust, поскольку точка доверия внедрена в ваш внутренний CA.

Возможно, сервер может отправить цепочку с помощью "Мой CA", "Мой выдающий CA" и "My JBoss Certificate". В этом случае клиент должен доверять "Entrust".

Если клиент не доверяет "Entrust" или "My CA", тогда вы получите ошибки проверки.


Я сделал один файл .pem всех сертификатов, которые будут работать. Это не так. Может ли кто-нибудь объяснить, что я делаю неправильно или даже если это возможно?

В этом случае нам нужно будет увидеть сертификаты, чтобы понять, что происходит. Можете ли вы опубликовать URL-адрес, который обслуживает сертификат, и использует цепочку; и опубликовать ваш внутренний сертификат CA ( "Мой CA" ) онлайн?

Здесь быстрый и грязный способ проверить соединение с OpenSSL s_client:

echo -e "GET / HTTP/1.0\r\n" | openssl s_client -connect myserver:8443 \
                                       -CAfile my-issuing-ca.pem

OpenSSL по умолчанию ничего не доверяет (в отличие от браузеров), поэтому вам нужно указать свой якорь доверия с помощью -CAfile.

Эта команда должна заканчиваться чем-то вроде следующего.

SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: 37E5AF0EE1745AB2...
    Session-ID-ctx:
    Master-Key: 7B9F8A79D3CC3A41...
    Key-Arg   : None
    Start Time: 1243051912
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)

Если в команде OpenSSL появляется сообщение "ОК", проблема связана с браузером и точкой доверия.