web-dev-qa-db-ja.com

opensslの信頼できる証明書のパスを見つける方法は?

インストールされているopensslがインストールされている証明書(信頼できる)を探している場所を確認するにはどうすればよいですか?/etc/ssl/certの場合もありますが、ここに新しいシステムがあり、このパスでは機能しません。

どうも!よろしく、クリス

17
chris01

OpenSSLに対してコンパイルされたこのCスニペットは、次のことを示しています。

#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;
}
12
caf

証明書が検索されるデフォルトのパスは、プラットフォームごとに異なる場合があります。次のコマンドを使用して、システム構成を検索できます。

$ openssl version -d

OPENSSLDIR: "/etc/pki/tls"
29
tnbt

インストールされているopensslがインストールされている証明書(信頼できる)を探している場所を確認するにはどうすればよいですか?

できません。 OpenSSLはデフォルトでは何も信頼せず、証明書を探しに行きません。あなたはそれに何を信頼するかを指示しなければなりません。 FAQトピックでそれをカバーしています: なぜ<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/ディレクトリ内の何かにヒットしないnotことに注意してください。 apps/は、openssl reqopenssl rsaopenssl dsaopenssl x509openssl signopenssl verifyなどのすべてのOpenSSLサンプルとユーティリティがある場所です。

次に:

$ 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/
$

私が言ったように、それは使われず、そこには何もありません。

4
jww

探しているパスは「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が検証するサーバー証明書に影響します。

s_client のようなOpenSSLコマンドは、バージョン1.1以降、オプション-no-CAfileおよび-no-CApathをサポートしていると思います。これらを使用すると、1つのコマンドの間、このファイルとディレクトリの証明書をそれぞれ無視できます。 (バージョン1.0.2をまだ使用しているため、これを再現できません。また、これらのオプションがありません。)

1
Jim DeLaHunt