Я пытаюсь получить промежуточный сертификат, используя curl
, и обработать сертификат, не записывая его в файл.
Я выяснил, как обработать листовой сертификат и получить точку распространения, но вот где я застрял.
Для примера, давайте возьмем stackoverflow (кажется уместным).Первый промежуточный сертификат для SO - от http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt
.
. В интерактивной оболочке я могу сделать что-то подобное, чтобы сохранить значение сертификата в переменной:
DigiCertIntermediateCert= $ (curl http://cacerts.digicert.com/DigiCertSHA2HighAssuranceServerCA.crt)
Тогда я могу проверить значение сертификата, выполнив что-то вроде этого:
echo "$ DigiCertIntermediateCert" | openssl x509 -informDER-outform PEM
Выводит приятный и дружелюбный PEM-сформированный сертификат. Он выглядит следующим образом:
-----BEGIN CERTIFICATE-----
MIIEsTCCA5mgAwIBAgIQBOHnpNxc8vNtwCtCuF0VnzANBgkqhkiG9w0BAQsFADBs
...
cPUeybQ=
-----END CERTIFICATE-----
(Примечание: это изменится при изменении промежуточного сертификата,если это не совсем то значение, которое вы видите, не волнуйтесь)
Аккуратно! Похоже, это должно сработать. Давайте бросим всю эту логику в скрипт с некоторой базовой обработкой падежа (например, еслиcert находится в другой форме, тогда мы должны интерпретировать его как эту форму), и мы должны быть готовы, верно?
#! /bin/bash
cert_content=$(curl -s "$1")
echo "$cert_content"
if echo "$cert_content" | openssl x509 -text -noout; then
echo "Not converting"
echo "$cert_content"
else
echo "Converting"
echo "$cert_content" | openssl x509 -inform DER -outform PEM
fi
Что выводит, когда мы передаем URL?
...
[binary contents of a certificate]
...
unable to load certificate
4667577964:error:09FFF06C:PEM routines:CRYPTO_internal:no start line:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.230.1/libressl-2.6/crypto/pem/pem_lib.c:683:Expecting: TRUSTED CERTIFICATE
Converting
unable to load certificate
4421875308:error:0DFFF08E:asn1 encoding routines:CRYPTO_internal:not enough data:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.230.1/libressl-2.6/crypto/asn1/a_d2i_fp.c:251:
Так что довольно легко увидеть, что сертификатicate находится в форме DER (из-за строки «Converting»), но похоже, что сертификат не завершен - обратите внимание на ошибку:
unable to load certificate
4421875308:error:0DFFF08E:asn1 encoding routines:CRYPTO_internal:not enough data:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.230.1/libressl-2.6/crypto/asn1/a_d2i_fp.c:251:
говорит о том, что данных недостаточно.
Почему это отличается между сценарием и действиями, которые я выполняю в оболочке?Как я могу передать бинарный сертификат через инструмент openssl, чтобы получить сертификат PEM-формы?