Неверный сертификат CA с самозаверяющей цепочкой сертификатов - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть самозаверяющая цепочка сертификатов с этими командами и я настроил их на сервере Apache

Но когда я пытаюсь openssl s_client -showcerts -servername server -connect my-host.local:443 -CAfile all.crt

, я получаю сообщение об ошибке от openssl Verify return code: 24 (invalid CA certificate)

Что-то не так с командами, используемыми для создания сертификатов, или с файлами конфигурации?

команды, используемые для создания цепочки сертификатов

# self signed root cert
openssl genrsa -aes256 -out ca.key 4096
openssl req -new -x509 -days 3000 -key ca.key -out ca.crt -config ca.conf

# intermediate cert signed with the root cert
openssl genrsa -aes256 -out int.key 4096
openssl req -new -key int.key -out int.csr -config int.conf
openssl x509 -req -days 3000 -in int.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out int.crt

# leaf cert signed with the intermediate cert

openssl genrsa -aes256 -out leaf.key 4096
openssl req -new -key leaf.key -out leaf.csr -config leaf.conf
openssl x509 -req -days 3000 -in leaf.csr -CA int.crt -CAkey int.key -set_serial 01 -out leaf.crt

 cat ca.crt int.crt leaf.crt > all.crt

Это файлы конфигурации, которые у меня естьused

ca.conf

[req]
имя-различия = req_distinguished_name
x509_extensions = v3_ca
dirstring_type = nobmp
[req_distinguished_name]
commonname= Общее имя (например, ВАШЕ имя)
commonName_default = root
[v3_ca]
keyUsage = критический, keyCertSign
subjectKeyIdentifier = хэш
authorKeyIdentifier = keyid: всегда, эмитент: всегда
basicConstraints = критические, CA: TRUE, pathlen: 1
extendedKeyUsage = serverAuth

int.conf

[req]
Однозначное_имя = req_distinguished_name
x509_extensions = ext
[req_distinguished_name]
commonName = Common Name (например, ВАШЕ имя)
commonName_default = int
[ext]
keyUsage = критический, keyCertSign
subjectKeyIdentifier= хеш
authorKeyIdentifier = keyid: всегда, эмитент: всегда
basicConstraints = CA: TRUE, pathlen: 0
extendedKeyUsage = serverAuth

leaf.conf

[req]
имя-различия = req_distinguished_name
dirstring_type = nobmp
[req_distinguished_name]
commonName = общее имя (например, ВАШЕ имя)
commonName_default = leaf

1 Ответ

0 голосов
/ 28 декабря 2018

Корневой сертификат CA должен быть помечен как принадлежащий CA :

Сертификат CA должен включать значение basicConstraints в поле CAустановите в TRUE.Сертификат конечного пользователя должен либо установить для CA значение FALSE, либо полностью исключить расширение.Некоторое программное обеспечение может требовать включения basicConstraints с CA, установленным в FALSE для сертификатов конечных объектов.

Это делается с помощью стандартного расширения basic constraints .Чтобы проверить, имеет ли ваш корневой сертификат установленный атрибут CA, запустите openssl x509 -text -noout -in ca.crt и найдите в выводе CA:True.Обратите внимание, что OpenSSL на самом деле позволит вам подписать другие сертификаты с помощью корневого сертификата не-CA (или, по крайней мере, раньше), но проверка таких сертификатов не удастся (потому что проверка CA потерпит неудачу).

С вашим конфигурационным файлом достаточно просто включить -extensions v3_ca в команду для создания корневого сертификата:

openssl req -new -x509 -extensions v3_ca -days 3000 -key ca.key -out ca.crt -config ca.conf -extfile ca.conf
...