Назад | Перейти на главную страницу

Ошибка аутентификации клиента openssl: предупреждение tlsv1 неизвестно ca:… предупреждение SSL номер 48

Я сгенерировал сертификат с помощью openssl и поместил его на клиентский компьютер, но когда я пытаюсь подключиться к моему серверу с помощью этого сертификата, я упоминал об ошибке в строке темы с моего сервера.

Вот что я сделал.

1) Я провожу тестовое соединение с помощью openssl, чтобы узнать, какие имена CA для сертификатов клиента приемлемы для моего сервера, я отправляю эту команду со своей клиентской машины на свой сервер:

openssl s_client -connect myupload.mysite.net:443/cgi-bin/posupload.cgi -prexit

и часть того, что я возвращаю, выглядит следующим образом:

Acceptable client certificate CA names
/C=US/ST=Colorado/L=England/O=Inteliware/OU=Denver Office/CN=Tim Drake/emailAddress=tdrake@mysite.com
/C=US/ST=Colorado/O=Inteliware/OU=Denver Office/CN=myupload.mysite.net/emailAddress=tdrake@mysite.com

2) Вот что находится в файле конфигурации apache на сервере относительно аутентификации клиента SSL:

SSLCACertificatePath /etc/apache2/certs

SSLVerifyClient require 
SSLVerifyDepth  10

3) Я сгенерировал самозаверяющий сертификат клиента с именем «client.pem», используя mypos.pem и mypos.key, поэтому, когда я запускаю эту команду:

openssl x509 -in client.pem -noout -issuer -subject -serial

вот что возвращается:

issuer= /C=US/ST=Colorado/O=Inteliware/OU=Denver Office/CN=myupload.mysite.net/emailAddress=tdrake@mysite.com
subject= /C=US/ST=Colorado/O=Inteliware/OU=Denver Office/CN=mlR::mlR/emailAddress=admin@inteliware.com
serial=0E

(обратите внимание, что mypos.pem находится в / etc / apache2 / certs /, а mypos.key сохраняется в / etc / apache2 / certs / private /)

4) Я помещаю client.pem на клиентскую машину, а на клиентской машине запускаю следующую команду:

openssl s_client -connect myupload.mysite.net:443/cgi-bin/posupload.cgi -status -cert client.pem

и я получаю эту ошибку:

CONNECTED(00000003)
OCSP response: no response sent
depth=1 /C=US/ST=Colorado/L=England/O=Inteliware/OU=Denver Office/CN=Tim Drake/emailAddress=tdrake@mysite.com
verify error:num=19:self signed certificate in certificate chain
verify return:0
574:error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca:/SourceCache/OpenSSL098/OpenSSL098-47/src/ssl/s3_pkt.c:1102:SSL alert number 48
574:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:/SourceCache/OpenSSL098/OpenSSL098-47/src/ssl/s23_lib.c:182:

Я действительно озадачен тем, что сделал не так. Я довольно много искал эту ошибку, и я обнаружил, что люди говорят, что ЦС, выдающий сертификат клиента, не доверяет серверу, но когда я смотрю на эмитента моего сертификата клиента, он соответствует одному из принятый CA, возвращенный моим сервером.

Кто-нибудь может помочь, пожалуйста?

Заранее спасибо.

Хорошо, я наконец выяснил, в чем проблема, и хотел бы поделиться ею на случай, если кто-то тоже застрянет с этим сообщением об ошибке.

В конфигурационном файле Apache, когда говорится о CA, есть следующие строки:

    #   Set the CA certificate verification path where to find CA
    #   certificates for client authentication or alternatively one
    #   huge file containing all of them (file must be PEM encoded)
    #   Note: Inside SSLCACertificatePath you need hash symlinks
    #         to point to the certificate files. Use the provided
    #         Makefile to update the hash symlinks after changes.

Это означает, что каждый файл сертификата в этом каталоге, на который указывает SSLCACertificatePath, должен использовать символическую ссылку. И, что наиболее важно, имя каждой символической ссылки должно быть хеш-значением субъекта каждого сертификата. Вы можете найти хэш-значение сертификата CA, выполнив эту команду:

    openssl x509 -subject_hash -in *cacert.pem*

Итак, если хеш-значение было 0434423b, в каталоге, на который указывает SSLCACertificatePath, вы должны создать две символические ссылки, указывающие на сертификат в каталоге:

0434423b -> /etc/apache2/certs/mypos.pem
0434423b.0 -> /etc/apache2/certs/mypos.pem

Это должно решить проблему. Конечно, если бы я использовал SSLCACertificateFile, не думаю, что у меня было бы столько проблем.

Я нашел объяснение SSLCACertificatePath здесь:

Страница команды openssl verify

посмотрите в -CApath каталог

Я обнаружил, что команда «sudo update-ca-сертификаты --fresh» автоматически генерирует символические ссылки из хэш-значения субъекта каждого сертификата на сертификат.

Привет. Вы пробовали выполнить следующую команду,

openssl s_client -connect myupload.mysite.net:443/cgi-bin/posupload.cgi -status -cert client.pem -verify 1 -showcerts

Обратите внимание проверить 1. Он сообщает ssl, насколько глубоко он должен зайти, и я думаю, что это может быть проблема, с которой вы столкнулись в вашей конфигурации apache. Попробуйте установить конфигурацию apache,

SSLVerifyDepth 1

Ура, Декстер