2010-11-09 120 views
9

我怎么能找到,我的openssl安装在哪里寻找安装的证书(可信)? 它有时候是/ etc/ssl/cert,但我在这里有一个新的系统,它不能使用这个路径。如何找出openssl可信任证书的路径?

thx! 问候,克里斯

+0

请尝试在此页面上查找您的系统类型:http://gagravarr.org/writing/openssl-certs/ others.shtml – indiv 2010-11-09 21:20:03

回答

10

此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; 
} 
+1

gcc -o cafscode cafscode.c $(pkg-config --libs --cflags openssl) – Jubal 2016-08-04 19:51:33

3

我怎么能找出来,装在哪寻找安装的证书我OpenSSL的(信任)?

你不行。 OpenSSL默认信任任何东西,它不会去寻找证书。你必须指示它相信什么。甚至还有覆盖它FAQ主题:Why does <SSL program> fail with a certificate verify error?

这个问题通常是由日志消息说一些 类似“无法获取本地颁发者证书”或“自签名证书 ”表示。当证书被验证时,其根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 reqopenssl rsaopenssl dsaopenssl x509openssl signopenssl 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

OpenSSL肯定会自动信任某些证书:在“OpenSSL文件目录”中找到的任何证书, 'cert.pem'或子目录'certs /'中。来源:_ [OpenSSL认可哪些认证机构?](https://www.madboa.com/geek/openssl/#what-c​​ertificate-authorities-does-openssl-recognize)_。现在,可能是您的安装在此目录中没有任何内容,但是我的安装将cert.pem链接到根证书颁发机构证书集合,因此我的安装会“自动”信任多个站点。 – 2017-12-18 07:25:51

8

查找证书的默认路径在每个平台上可能都不相同。您可以使用以下命令查找您的系统配置:

$ openssl version -d 

OPENSSLDIR: "/etc/pki/tls" 
0

您正在查找的路径是“OpenSSL文件目录”。由于@tnbt answeredopenssl version -d(或-a)为您提供此目录的路径。 OpenSSL在这里查找名为cert.pem的文件和子目录certs/。证书在openssl s_clientopenssl verify(来源:文章,What certificate authorities does OpenSSL recognize?)被视为信任的证书。

% 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版本,并且它缺少这些选项。)

相关问题