как узнать путь к доверенному сертификату openssl? - PullRequest
14 голосов
/ 09 ноября 2010

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

thx!С уважением, Крис

Ответы [ 4 ]

21 голосов
/ 16 ноября 2016

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

$ openssl version -d

OPENSSLDIR: "/etc/pki/tls"
11 голосов
/ 10 ноября 2010

Этот фрагмент кода 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;
}
3 голосов
/ 07 августа 2014

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

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

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


Ответ Caf является своего рода правильным, но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/
$

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

0 голосов
/ 18 декабря 2017

Путь, который вы ищете, это «Каталог для файлов 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.Те, в свою очередь, пришли из Mozilla.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...