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

Apache: mod_ssl: Ошибка: закрытый ключ не найден

Я устанавливаю сертификат SSL для обслуживания HTTPS. я использую Apache 2.4 в Amazon Linux и получил сертификат в Startssl. Конфигурация моего Vhost следующая:

<IfModule mod_ssl.c>
  <VirtualHost _default_:443>
    ServerAdmin webmaster@myweb.com
    ServerName myweb.com
    DocumentRoot /var/www/html/myapp
    <Directory /var/www/htmlmyapp>
      Options Indexes FollowSymLinks MultiViews
      AllowOverride None
      Order allow,deny
      allow from all
    </Directory>

    ErrorLog /var/log/httpd/error_log
    LogLevel warn

    CustomLog /var/log/httpd/ssl_access.log combined
    SSLEngine on
    SSLCertificateFile    /etc/ssl/certs/mycert.crt
    SSLCertificateKeyFile /etc/ssl/private/mycert.key
    SSLCertificateFile /etc/ssl/certs/sub.class1.server.ca.pem
    BrowserMatch "MSIE [2-6]" \
      nokeepalive ssl-unclean-shutdown \
      downgrade-1.0 force-response-1.
    BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

  </VirtualHost>
</IfModule>

Когда я перезапускаю Apache, я получаю следующий результат:

Stopping httpd:                                            [  OK  ]
Starting httpd: Apache/2.4.12 mod_ssl (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Private key myweb.com:443:0 (/etc/ssl/private/mycert.key)
Enter pass phrase:

OK: Pass Phrase Dialog successful.
Apache:mod_ssl:Error: Private key not found.
**Stopped
                                                           [FAILED]

Итак, он запрашивает у меня кодовую фразу ключа, кодовую фразу в порядке, а затем он говорит, что не может ее найти. Что мне не хватает?

В вашей конфигурации у вас есть эти три строки:

SSLCertificateFile    /etc/ssl/certs/mycert.crt
SSLCertificateKeyFile /etc/ssl/private/mycert.key
SSLCertificateFile /etc/ssl/certs/sub.class1.server.ca.pem

Вы повторяете SSLCertificateFile. Это означает, что Apache будет использовать второй экземпляр переменной, т.е. /etc/ssl/certs/sub.class1.server.ca.pem - но твой ключ для /etc/ssl/certs/mycert.crt, поэтому он не соответствует сертификату CA. Таким образом, Apache не может найти ключ для сертификата.

Вероятно, ваша конфигурация должна выглядеть так:

# Server certificate
SSLCertificateFile    /etc/ssl/certs/mycert.crt
# Key to server certificate
SSLCertificateKeyFile /etc/ssl/private/mycert.key
# Glue certificate to CA
SSLCACertificateFile /etc/ssl/certs/sub.class1.server.ca.pem

Обратите внимание, что второй сертификат начинается с SSLCA вместо просто SSL.

В вашем файле конфигурации вы указываете на плохой файл PrivateKey SSLCertificateKeyFile /etc/ssl/private/mycert.key вместо того SSLCertificateKeyFile /etc/ssl/private/myweb.key.

За рамками вопроса: вы уверены, что хотите сохранить пароль на своем закрытом ключе? Означает, что если ваш сервер перезагрузится, ему снова потребуется пароль. Но это также означает, что любой, кто имеет доступ к серверу, может скомпрометировать ваш закрытый ключ.

Чтобы сгенерировать новый ключ без ключевой фразы, используйте: openssl rsa -in oldkey.pem -out newkey.pem