Я не понимаю вывода openssl. Запуск openssl следующим образом:
#openssl s_client -connect google.com:443 -CAfile cacert.pem < /dev/null
В конечном итоге все в порядке, поскольку сертификат конечного объекта был проверен правильно: Verify return code: 0 (ok)
но как насчет проверки return:1
в начале вывода для промежуточных продуктов ниже? Что это значит или в чем суть?
depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authority verify return:1 depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA verify return:1 depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2 verify return:1 depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = google.com verify return:1 --- Certificate chain 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=google.com i:/C=US/O=Google Inc/CN=Google Internet Authority G2 1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2 i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority ---
Функция обратного вызова verify (используемая для окончательной проверки применимости сертификата для конкретного использования) передается через SSL в поле, называемое preverify_okay
поле, указывающее, прошла ли цепочка сертификатов базовые проверки, применимые ко всем случаям. А 1
означает, что эти проверки пройдены.
int verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx)
Функция verify_callback используется для управления поведением, когда установлен флаг SSL_VERIFY_PEER. Он должен быть предоставлен приложением и получает два аргумента: preverify_ok указывает, прошла ли проверка соответствующего сертификата (preverify_ok = 1) или нет (preverify_ok = 0).
Это то, что verify return:1
показывает.
Вы можете проверить код, если хотите более подробную информацию:
int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
{
[ snip ]
BIO_printf(bio_err,"verify return:%d\n",ok);
return(ok);
}