Как вы написали с ничем перед символом перенаправления >
:
>filename.txt
буквально перенаправляет ничего в имя файла. txt
.
Обычно это делается для очистки / стирания содержимого текстового файла.
Если filename.txt
еще не существует, он будет создан.
Вы должны поместить сертификат, который вы хотите проверить, в один файл, а цепочку в другой:
openssl verify -CAfile chain.pem mycert.pem
Также важно (конечно), чтобы openssl
знал, как найти корневой сертификат, если он не включен в chain.pem. Если вам нужно это сделать (если вы используете свой собственный CA), вы можете указать альтернативный каталог, в котором он будет искаться с помощью -CApath
Итак, я нашел ответ, OpenSSL проверяет только первый сертификат в файле. Это означает, что если у вас есть действительная цепочка, вы должны проверять только последний сертификат.
El problema está en la salida del comando -showcerts
:, solo tiene su certificado y el certificado que lo firmó -y probablemente sea un certificado intermedio, pero no la cadena completa. Para tener la declaración OK, debe:
-BEGIN END-
bloque )en el archivomycert.crt
CAcerts.crt
openssh -text -in CAcerts.crt
para buscar una CA raíz que haya firmado esto y agréguela a CAfile.crt
. openssl verify -CAfile CAcerts.crt mycert.crt
Nota :Puede obtener los conocidos certificados de CA de la tienda de Firefox utilizando la GUI de preferencias (ver certificados y luego exportar ), o en línea de comando con certutil
, que se encuentra en su directorio de perfil de Firefox. Por ejemplo:
$ find $HOME/.mozilla/firefox -name cert8.db # point for example to abcdef.default directory
$ certutil -a -L -d $HOME/.mozilla/firefox/abcdef.default/ -n "Let's Encrypt` Authority X3"
Вы можете добиться желаемого результата комбинацией certtool
и openssl
. Важно отметить, что здесь задействованы две вещи: одна — проверка самой цепочки, а другая — проверка того, является ли цепочка доверенной по отношению к локально установленным доверенным корневым сертификатам.
Пожалуйста, проверьте отрицательные случаи, то есть убедитесь, что то, что ваш тест должен определить как недействительное, правильно определяется как недействительное. Вы можете сделать это с помощьюhttps://badssl.com/или чего-то, что вы сделаете сами. Если вы не знаете наверняка, что отрицательные случаи не пройдут все, что вы тестируете, то тест мало чем поможет.
Для проверки надежности цепочки:
openssl s_client -showcerts -connect example.com:443 </dev/null 2>/dev/null \
| sed -ne '/-BEGIN/,/-END/p' \
| certtool --verify
Только проверка целостности цепочки -, но не доверие:
openssl s_client -showcerts -connect example.com:443 </dev/null 2>/dev/null \
| sed -ne '/-BEGIN/,/-END/p' \
| certtool --verify-chain
Пример доверенной цепочки:
$ openssl s_client -showcerts -connect example.com:443 </dev/null 2>/dev/null | sed -ne '/-BEGIN/,/-END/p' | certtool --verify
Loaded system trust (154 CAs available)
Subject: CN=DigiCert SHA2 Secure Server CA,O=DigiCert Inc,C=US
Issuer: CN=DigiCert Global Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US
Signature algorithm: RSA-SHA256
Output: Not verified. The certificate is NOT trusted. The certificate issuer is unknown.
Subject: CN=DigiCert SHA2 Secure Server CA,O=DigiCert Inc,C=US
Issuer: CN=DigiCert Global Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US
Signature algorithm: RSA-SHA256
Output: Not verified. The certificate is NOT trusted. The certificate issuer is unknown.
Subject: CN=DigiCert SHA2 Secure Server CA,O=DigiCert Inc,C=US
Issuer: CN=DigiCert Global Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US
Checked against: CN=DigiCert Global Root CA,OU=www.digicert.com,O=DigiCert Inc,C=US
Signature algorithm: RSA-SHA256
Output: Verified. The certificate is trusted.
Subject: CN=www.example.org,OU=Technology,O=Internet Corporation for Assigned Names and Numbers,L=Los Angeles,ST=California,C=US
Issuer: CN=DigiCert SHA2 Secure Server CA,O=DigiCert Inc,C=US
Checked against: CN=DigiCert SHA2 Secure Server CA,O=DigiCert Inc,C=US
Signature algorithm: RSA-SHA256
Output: Verified. The certificate is trusted.
Chain verification output: Verified. The certificate is trusted.
Пример недоверенной цепочки:
$ openssl s_client -showcerts -connect untrusted-root.badssl.com:443 </dev/null 2>/dev/null | sed -ne '/-BEGIN/,/-END/p' | certtool --verify
Loaded system trust (154 CAs available)
Subject: CN=*.badssl.com,O=BadSSL,L=San Francisco,ST=California,C=US
Issuer: CN=BadSSL Untrusted Root Certificate Authority,O=BadSSL,L=San Francisco,ST=California,C=US
Signature algorithm: RSA-SHA256
Output: Not verified. The certificate is NOT trusted. The certificate issuer is unknown.
Subject: CN=*.badssl.com,O=BadSSL,L=San Francisco,ST=California,C=US
Issuer: CN=BadSSL Untrusted Root Certificate Authority,O=BadSSL,L=San Francisco,ST=California,C=US
Signature algorithm: RSA-SHA256
Output: Not verified. The certificate is NOT trusted. The certificate issuer is unknown.
Subject: CN=*.badssl.com,O=BadSSL,L=San Francisco,ST=California,C=US
Issuer: CN=BadSSL Untrusted Root Certificate Authority,O=BadSSL,L=San Francisco,ST=California,C=US
Signature algorithm: RSA-SHA256
Output: Not verified. The certificate is NOT trusted. The certificate issuer is unknown.
Chain verification output: Not verified. The certificate is NOT trusted. The certificate issuer is unknown.
Проверка, тем не менее, действительна ли ненадежная цепочка:
$ openssl s_client -showcerts -connect untrusted-root.badssl.com:443 </dev/null 2>/dev/null | sed -ne '/-BEGIN/,/-END/p' | certtool --verify-chain
Subject: CN=*.badssl.com,O=BadSSL,L=San Francisco,ST=California,C=US
Issuer: CN=BadSSL Untrusted Root Certificate Authority,O=BadSSL,L=San Francisco,ST=California,C=US
Checked against: CN=BadSSL Untrusted Root Certificate Authority,O=BadSSL,L=San Francisco,ST=California,C=US
Signature algorithm: RSA-SHA256
Output: Verified. The certificate is trusted.
Chain verification output: Verified. The certificate is trusted.