Я получаю ошибку, упомянутую в заголовке, в Firefox, когда пытаюсь получить доступ к своему веб-сайту на моем компьютере. Это ошибка, которую я получаю:
An error occurred during a connection to www.st.um.
SSL peer was unable to negotiate an acceptable set of security parameters.
(Error code: ssl_error_handshake_failure_alert)
Это моя конфигурация виртуального хоста:
<VirtualHost *:443>
ServerAdmin user1@st.um
ServerName www.st.um
DocumentRoot /var/www/web
<Directory /var/www/web>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
SSLEngine on
SSLCertificateFile /usr/lib/ssl/demoCA/servercert.pem
SSLCertificateKeyFile /usr/lib/ssl/demoCA/serverkey.pem
SSLCACertificateFile /usr/lib/ssl/demoCA/stcert.pem
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
# MSIE 7 and newer should be able to use keepalive
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
SSLVerifyClient require
SSLVerifyDepth 10
</VirtualHost>
Сертификат «servercert.pem» сертифицирован с использованием моего CA: «stcert.pem», и я могу использовать сертификат «servercert.pem» с ключом «serverkey.pem», чтобы получить доступ к s_server в качестве сервера и имея свои CA импортированы и доверены в списке авторитетов веб-браузера:
openssl s_server -cert servercert.pem -key serverkey.pem -www
Я также могу получить доступ к своему веб-сайту как клиент, используя файл PKCS # 12, созданный из сертификата clientcert.pem с его ключом clientkey.pem.
Единственное, что у меня есть в /etc/log/apache2/error.log, это:
[Sat May 25 02:44:11 2013] [notice] Apache/2.2.22 (Ubuntu)
PHP/5.3.10-1ubuntu3.6 with Suhosin-Patch mod_ssl/2.2.22
OpenSSL/1.0.1 configured -- resuming normal operations
Я отредактировал конфигурацию виртуального хоста и удалил:
SSLVerifyClient require
SSLVerifyDepth 10
И теперь он работает для аутентификации на стороне сервера. Директива SSLVerifyClient требует переопределения строк:
SSLCertificateFile /usr/lib/ssl/demoCA/servercert.pem
SSLCertificateKeyFile /usr/lib/ssl/demoCA/serverkey.pem
SSLCACertificateFile /usr/lib/ssl/demoCA/stcert.pem
И в этом была проблема. Директива «SSLVerifyClient require» предназначена для аутентификации на стороне клиента и заставляет openSSL всегда запрашивать сертификат от клиента.