-1

この指示に従って、自己署名証明書 http://apetec.com/support/GenerateSAN-CSR.htmを作成しました。ただし、証明書は常に検証に失敗し、TLS 接続プログラムはこの証明書を使用して接続をセットアップできません。

それを解決する理由と方法はありますか?

以下は、証明書と検証結果を生成するコマンドです。

$ openssl genrsa -out private.key 2048
$ openssl req -new -out public.csr -key private.key -config openssl.conf
$ openssl req -text -noout -in public.csr 
$ openssl x509 -req -days 365 -in public.csr -signkey private.key -out public.crt -extensions v3_req -extfile openssl.conf
$ openssl verify -CAfile public.crt public.crt 
public.crt: O = My Company, L = My Town, ST = State or Providence, C = US
error 20 at 0 depth lookup:unable to get local issuer certificate

以下はopenssl.confです。IP アドレスは部分的に取り消し線が引かれています。

#
# OpenSSL configuration file.
#

# Establish working directory.

dir                 = .

[ ca ]
default_ca              = CA_default

[ policy_match ]
countryName             = match
stateOrProvinceName         = match
organizationName            = match
organizationalUnitName          = optional
commonName              = supplied
emailAddress                = optional

[ req ]
default_bits                = 1024          # Size of keys
default_keyfile             = key.pem       # name of generated     keys
default_md              = md5               # message digest    algorithm
string_mask             = nombstr       # permitted characters
distinguished_name          = req_distinguished_name
req_extensions              = v3_req

[ req_distinguished_name ]
# Variable name             Prompt string
#-------------------------    ----------------------------------
0.organizationName          = Organization Name (company)
organizationalUnitName          = Organizational Unit Name (department, division)
emailAddress                = Email Address
emailAddress_max            = 40
localityName                = Locality Name (city, district)
stateOrProvinceName         = State or Province Name (full name)
countryName             = Country Name (2 letter code)
countryName_min             = 2
countryName_max             = 2
commonName              = Common Name (hostname, IP, or your name)
commonName_max              = 64

# Default values for the above, for consistency and less typing.
# Variable name             Value
#------------------------     ------------------------------
0.organizationName_default      = My Company
localityName_default            = My Town
stateOrProvinceName_default     = State or Providence
countryName_default         = US

[ v3_ca ]
basicConstraints            = CA:TRUE
subjectKeyIdentifier            = hash
authorityKeyIdentifier          = keyid:always,issuer:always

[ v3_req ]
basicConstraints            = CA:FALSE
subjectKeyIdentifier            = hash
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
IP.1 = 1xx.1x.1xx.xxx
4

1 に答える 1

0

生成しているのは、自己署名のルート証明書です。OpenSSL は、証明書ストアに存在する信頼されたルートまで証明書を連鎖させることによって、証明書を検証しようとします。あなたのものは(明らかに)そのストアにないので、常に失敗します。

警告を取り除くには、次の 3 つの方法があります。

証明書の検証を無効にする

証明書の検証がなければ、TLS ハンドシェイクの ID コンポーネントを完全に無効にしてしまうため、これは一般的に悪い考えです。開発でのみ使用してください (本番環境には絶対に漏らさないでください!)

ルート証明書をトラスト ストアに追加する

このエンドポイントと通信する必要があるすべてのマシンに証明書をインストールする意思がある場合、これは機能します。(OpenSSL の場合、これはディストリビューション固有の場所にある ca_bundle ファイルです)

CA から証明書を購入する

最も簡単ですが、$$$の費用がかかります。これを行うと、この証明書をインストールしているサイトはグローバルに信頼されます。

于 2013-05-22T22:19:06.330 に答える