web-dev-qa-db-ja.com

opensslは-CAfileで指定されない限り証明書を見つけられません

私は数日以来、opensslと格闘しています。

ARM=デバイスでopensslをコンパイルしました。_openssl s_client -connect google.com:443_を実行すると、_error 20: unable to get local issuer certificate_で接続が失敗します。

_-CAfile /etc/ssl/certs/ca-certificates.crt_を指定してそのコマンドを実行すると、接続が機能し、verify return code: 0 (ok)が返されます。私が行ったもう1つのテストは、_-CApath /etc/ssl/certs/_を使用してコマンドを実行することです。この場合も、error 2が返されます。

OPENSSLDIRは/ usr/lib/sslなので、これを/ etc/ssl/certsにリンクすることに成功しました。ファイルシステムでは、ディレクトリは次のようになります。

_ls -l /usr/lib/ssl
certs -> /etc/ssl/certs
_

私は何が欠けているのか、opensslが証明書を探す必要があるディレクトリを設定する方法を理解していません。誰かが同様の問題を抱えていましたか?

2
Marco

CApathで指定されたディレクトリは、特別な構造を持つ必要があります。 From OpenSSL docs

CApathがNULLでない場合は、PEM形式のCA証明書を含むディレクトリを指します。ファイルには、それぞれ1つのCA証明書が含まれています。ファイルは、CAサブジェクト名のハッシュ値によって検索されます。したがって、この値は使用可能である必要があります。同じ名前のハッシュ値を持つCA証明書が複数存在する場合、拡張子は異なる必要があります(9d66eef0.0、9d66eef0.1など)。検索は、証明書の他のプロパティに関係なく、内線番号の順序で実行されます。 c_rehashユーティリティを使用して、必要なリンクを作成します

私が間違っていなければ、次の場合にディレクトリをCApathとして使用できます。

  • 各ファイルに権限を含むpem形式のファイルが含まれています。
  • その中でc_rehashを実行します(または適切なシンボリックリンクを手動で作成します)。
1
J.M. Robles