Я пытаюсь использовать клиентские сертификаты для ограничения безопасного доступа к веб-серверу apache2. Однако после установки Google Chrome возвращает ошибку ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILED.
Сначала я настроил CA для веб-сервера, создав ключ CA и файл PEM X509:
openssl genrsa -out CA.key 2048
openssl req -x509 -new -nodes -key CA.key -days 7300 -out CA.pem
У меня уже есть существующий сертификат для веб-сайта, установленный в apache2 для связи https, выделенный доверенной третьей стороной. Ниже приведен параметр apache2 conf для этого веб-сайта, где я включил SSLCACertificateFile для сгенерированного выше сертификата, директивы SSLOptions, SSLVerifyClient и SSLVerfiyDepth:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName site.aname.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/site
<Directory /var/www/html/site>
Options FollowSymLinks
AllowOverride All
Require all granted
SSLOptions +StdEnvVars
SSLVerifyClient require
SSLVerifyDepth 1
</Directory>
LogLevel debug
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCACertificateFile /etc/apache2/ssl/site/CA.pem
SSLCertificateFile /etc/apache2/ssl/site/fullchain.pem
SSLCertificateKeyFile /etc/apache2/ssl/site/privkey.pem
Include /etc/apache2/ssl/site/options-ssl-apache.conf
</VirtualHost>
</IfModule>
Это завершает настройку веб-сервера и тестирует без сертификата клиента и получает ожидаемую ошибку.
Затем я генерирую клиентский сертификат и подписываюсь с CA, а затем упаковываю в pkcs12 с закрытым ключом следующее:
GENERATE:
openssl genrsa -out user.key 2028
openssl req -new -key user.key -out user.csr
ПОДПИСАТЬСЯ С:
openssl x509 -sha256 -req -in user.csr -out user.crt -CA CA.pem -CAkey CA.key -CAcreateserial -days 1095
СОЗДАТЬ PKCS12:
openssl pkcs12 -export -out user.pfx -inkey user.key -in user.crt
Результирующий файл user.pfx затем устанавливается на пользовательские машины с Chrome.
При попытке подключения chrome запрашивает ключ, который был выбран с результатом ошибки ERR_SSL_CLIENT_AUTH_SIGNATURE_FAILED.
Версия Chrome под Windows 10: Версия 74.0.3729.169 (официальная сборка) (64-разрядная версия)
Обновление:
Я могу успешно подключиться с помощью curl с другого сервера Linux, используя:
curl --cert user.crt --key user.key --pass password https://site.aname.com/
однако, то же самое из командной строки Windows 10 приводит к:
curl: (35) schannel: next InitializeSecurityContext не выполнен: неизвестная ошибка (0x80090027) - неверный параметр