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

Клиентские сертификаты (Apache, Linux, OpenSSL)

Моя компания приобрела групповой сертификат у поставщика. Этот сертификат был успешно настроен с Apache 2.2 для защиты поддомена. На стороне SSL все работает.

Теперь мне необходимо сгенерировать клиентские сертификаты x509 для выпуска для этого поддомена. Я слежу за этой страницей: (http://www.vanemery.com/Linux/Apache/apache-SSL.html), начиная с «Создание клиентских сертификатов для аутентификации».

Я создал файлы p12 и успешно импортировал их в Firefox. Когда я сейчас захожу на сайт, я получаю сообщение об ошибке в FireFox: «Соединение с сервером было сброшено во время загрузки страницы».

Я думаю, что моя проблема в том, что я неправильно подписываю клиентскую сторону. Когда я подписываю сертификат на стороне клиента, я использую файл PEM (RapidSSL_CA_bundle.pem) от RapidSSL (у которого мы купили сертификат) в качестве аргумента -CA. В качестве аргумента -CAkey я использую закрытый ключ сервера. Это верно?

Возможно, вы используете клиентские сертификаты с неправильным использованием ключей. Убедитесь, что у вашего ключа есть:

  • Критический
  • Подписание
  • Безотказность
  • Ключевое шифрование

Если вы используете расширенное использование ключа, проверьте

  • Не критично
  • Проверка подлинности веб-клиента TLS
  • Защита электронной почты

На стороне сервера убедитесь, что у вас есть весь сертификат CA, который использовался для подписи сертификата клиента, и настроена соответствующая иерархия pki. В типичной настройке apache это будет выглядеть так:

<VirtualHost *:443>
    ServerAdmin admin@example.net                                                                                      
    DocumentRoot /var/www/
    ServerName service.example.net
    ScriptAlias /cgi-bin/ /var/www/cgi-bin/
    <Directory "/var/www/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
            Order allow,deny
            Allow from all
    </Directory>

    <Directory "/var/www/">
            Options Indexes MultiViews FollowSymLinks
            AllowOverride None
    </Directory>

    SSLEngine on
    SSLOptions +StdEnvVars
    SSLCertificateFile    /usr/local/ssl/certs/Server.crt
    SSLCertificateKeyFile /usr/local/ssl/private/Server.key
    SSLCACertificateFile  /usr/local/ssl/certs/caRoot.cacert.pem
    SSLVerifyClient require
    ErrorLog logs/service.example.net-443-error_log
    LogLevel info
    CustomLog logs/service.example.net-443-access.log combined

Наконец, вы можете попробовать отладку с помощью старого доброго openssl

openssl s_client -connect server.example.net:443 -CAfile ../ca/caRoot.crt -cert client-Access.crt -key client-Access.key  -showcerts

или завить

curl -kv --key client-Access.key --cert client-Access.crt --cacert ../ca/caRoot.crt  https://server.example.net/

Удачи!