2013-05-22 3 views
-1

Я выполнил эту инструкцию, чтобы создать самозаверяющий сертификат http://apetec.com/support/GenerateSAN-CSR.htm. Однако сертификат всегда не проверяется, и моя программа подключения tls не может установить соединение с использованием этого сертификата.Самостоятельно подписанный сертификат SAN не был подтвержден

Любая идея, почему и как ее решить?

Ниже приведены команды для создания сертификата и результата проверки.

$ 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 

ответ

0

Что вы создаете, является самозаверяющим корневым сертификатом. OpenSSL пытается проверить сертификаты, привязывая сертификаты до доверенного корня, которые присутствуют в хранилище сертификатов. Поскольку ваш (очевидно) не находится в этом магазине, он всегда будет терпеть неудачу.

Вот три способа, чтобы избавиться от предупреждений:

Отключить сертификат проверки

Это вообще плохая идея, потому что без проверки сертификата вы полностью отключить компонент идентичности рукопожатия TLS. Используйте его только в развитии (и никогда не позволить ей течь в производство!)

Добавьте свой корневой сертификат в хранилище доверенного

Это будет работать при условии, что вы готовы установить сертификат на каждой машине, которая нуждается поговорить с этой конечной точкой. (Для OpenSSL это ca_bundle файл, который находится в распределительном определенном месте)

Купить сертификат от CA

Самый простой, но и тот, который стоит $$$. Если вы это сделаете, то сайт, на который вы устанавливаете этот сертификат, будет доверен глобально.

Смежные вопросы