2010-11-09 119 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版本,並且它缺少這些選項。)

相關問題