Как узнать путь к доверенному сертификату openssl?

Как я могу узнать, где мой установленный openssl ищет установленные сертификаты (доверенные)? иногда это /etc/ssl/cert, но у меня есть новая система, и она не работает с этим путем.

Спасибо! С уважением, Крис

4 ответа

Решение

Этот фрагмент кода C, скомпилированный с OpenSSL, скажет вам:

#include <stdlib.h>
#include <stdio.h>
#include <openssl/x509.h>

int main()
{
    const char *dir;

    dir = getenv(X509_get_default_cert_dir_env());

    if (!dir)
        dir = X509_get_default_cert_dir();

    puts(dir);

    return 0;
}

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

$ openssl version -d

OPENSSLDIR: "/etc/pki/tls"

Путь, который вы ищете, это "Каталог для файлов OpenSSL". Как ответил @tnbt, openssl version -d (или же -a) дает вам путь к этому каталогу. OpenSSL ищет здесь файл с именем cert.pem и подкаталог certs/, Сертификаты, которые он там находит, считаются доверенными openssl s_client а также openssl verify (источник: статья " Какие центры сертификации распознает OpenSSL?").

% openssl version -d
OPENSSLDIR: "/opt/local/etc/openssl"
% ls -l /opt/local/etc/openssl/cert*
lrwxr-xr-x  1 root  admin  40 29 Nov 02:05 /opt/local/etc/openssl/cert.pem -> /opt/local/share/curl/curl-ca-bundle.crt
% head -10 /opt/local/etc/openssl/cert.pem
##
## Bundle of CA Root Certificates
##
## Certificate data from Mozilla as of: Fri Nov 24 08:00:26 2017 GMT
##
## This is a bundle of X.509 certificates of public Certificate Authorities
## (CA). These were automatically extracted from Mozilla's root certificates
## file (certdata.txt).  This file can be found in the mozilla source tree:
## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
##
...[rest of file omitted]...

Оказывается, установщик, который установил OpenSSL в моей системе, также установил cert.pem как символическая ссылка на пакет сертификатов центра сертификации из инструмента cUrl, Те, в свою очередь, пришли из Мозиллы.

Возможно, в этом файле или каталоге ничего не установлено, или у вас может быть другой набор сертификатов. Это будет влиять на то, какие сертификаты сервера проверяет OpenSSL.

OpenSSL команды, такие как s_client поддержка, я думаю, начиная с версии 1.1, варианты -no-CAfile а также -no-CApath, Они позволяют игнорировать сертификаты в этом файле и каталоге соответственно на протяжении одной команды. (Я не могу воспроизвести это, потому что я все еще использую версию 1.0.2, и у нее нет этих опций.)

Как я могу узнать, где мой установленный openssl ищет установленные сертификаты (доверенные)?

Ты не можешь OpenSSL по умолчанию ничего не доверяет и не ищет сертификатов. Вы должны дать ему указание, чему доверять. Есть даже тема часто задаваемых вопросов, покрывающая это: Почему <SSL program> сбой с сертификатом проверить ошибку?:

Эта проблема обычно указывается в сообщениях журнала, в которых говорится что-то вроде "невозможно получить сертификат локального эмитента" или "самозаверяющий сертификат". Когда сертификат проверен, его корневой CA должен быть "доверенным" OpenSSL, это обычно означает, что сертификат CA должен быть помещен в каталог или файл и соответствующая программа настроена для его чтения. Программа OpenSSL 'verify' ведет себя аналогичным образом и выдает похожие сообщения об ошибках: для получения дополнительной информации посетите страницу руководства программы verify(1).


Ответ Кафа вроде правильный, но OpenSSL его не использует, и там ничего нет...

$ grep -R X509_get_default_cert_dir *
...
crypto/x509/x509_def.c:const char *X509_get_default_cert_dir(void)
...

Обратите внимание, что это ничего не касается в apps/ каталог. apps/ где все образцы и утилиты OpenSSL, как openssl req, openssl rsa, openssl dsa, openssl x509, openssl sign, openssl verify, так далее.

Затем:

$ cat crypto/x509/x509_def.c
...
const char *X509_get_default_cert_dir(void)
    { return(X509_CERT_DIR); }
...

$ grep -R X509_CERT_DIR *
crypto/cryptlib.h:#define X509_CERT_DIR     OPENSSLDIR "/certs"

И наконец:

$ ls /usr/local/ssl/certs/
$

Как я уже сказал, его не используют и там ничего нет.

Другие вопросы по тегам