CentOS 7| Apache 2.4.6
プライベート認証局(CA)と2つの証明書(1つはサーバー用、もう1つはクライアント用)を作成しました。
次に、HTTPS接続に応答するために証明書X.509を使用するようにApacheを構成しましたが、すべて正常に動作しました(ブラウザーで確認しました)。
次に、クライアント認証を構成しているときに、サーバーを再起動すると、次のエラーが発生しました。
制御プロセスがエラーコードで終了したため、httpd.serviceのジョブが失敗しました。詳細については、「systemctl status httpd.service」および「journalctl -xe」を参照してください。
「SyntaxOK」と表示されますが、コマンドを使用してサーバーを起動できず、次のエラーが発生します。
。 systemctl status httpd.service
[root@localhost ~]# systemctl status httpd.service
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Wed 2019-05-01 18:35:40 WEST; 2min 3s ago
Docs: man:httpd(8)
man:apachectl(8)
Process: 12292 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE)
Process: 12288 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
Main PID: 12288 (code=exited, status=1/FAILURE)
May 01 18:35:37 src_ca systemd[1]: Starting The Apache HTTP Server...
May 01 18:35:40 src_ca systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
May 01 18:35:40 src_ca kill[12292]: kill: cannot find process ""
May 01 18:35:40 src_ca systemd[1]: httpd.service: control process exited, code=exited status=1
May 01 18:35:40 src_ca systemd[1]: Failed to start The Apache HTTP Server.
May 01 18:35:40 src_ca systemd[1]: Unit httpd.service entered failed state.
May 01 18:35:40 src_ca systemd[1]: httpd.service failed.
。 "journalctl -xe"
May 01 18:39:16 src_ca polkitd[2607]: Registered Authentication Agent for unix-process:12474:9099194 (system bus name :1.157 [/usr/bin/pkttyagent --notify-fd 5 --fallba
May 01 18:39:16 src_ca systemd[1]: Starting The Apache HTTP Server...
-- Subject: Unit httpd.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit httpd.service has begun starting up.
May 01 18:39:18 src_ca systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
May 01 18:39:18 src_ca kill[12483]: kill: cannot find process ""
May 01 18:39:18 src_ca systemd[1]: httpd.service: control process exited, code=exited status=1
May 01 18:39:18 src_ca systemd[1]: Failed to start The Apache HTTP Server.
-- Subject: Unit httpd.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit httpd.service has failed.
--
-- The result is failed.
May 01 18:39:18 src_ca systemd[1]: Unit httpd.service entered failed state.
May 01 18:39:18 src_ca systemd[1]: httpd.service failed.
May 01 18:39:18 src_ca polkitd[2607]: Unregistered Authentication Agent for unix-process:12474:9099194 (system bus name :1.157, object path /org/freedesktop/PolicyKit1/
クライアント認証を構成するために使用したプロセスを以下に残します。質問の最後にいくつかの有用なファイルを残しておきます。
クライアント認証を構成する手順
ファイル「/etc/httpd/conf.d/ssl.conf」でオプション「SSLCACertificateFile」を見つけることから始めます:
vi +/SSLCACertificateFile /etc/httpd/conf.d/ssl.conf
パスを
/etc/pki/CA/certs/ca.crt
に更新しました
これは、CAの証明書の場所です。
注:クライアントの証明書は、フォルダー/ etc/pki/CA/certs内にあります。これがクライアント認証の構成時に問題を引き起こすかどうかはわかりません。 (更新:編集1)
ディレクティブ「SSLVerifyClientrequire」の「#」を削除しました。
変更を保存し、
:wq
でファイルを終了してから、サーバーを再起動しました:systemctl restart httpd
デバッグに役立つファイル
。 "etc/hosts"(IP +ホストの追加)
。 "/ etc/hostname"(hostnamectl set-hostname new-hostname
で実行できます)
。 「etc/httpd/conf/httpd.conf」
。 「/etc/httpd/conf.d/ssl.conf」
。 "/ var/log/httpd/error_log"
[Wed May 01 18:18:13.050768 2019] [core:notice] [pid 11416] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
[Wed May 01 18:18:13.053282 2019] [suexec:notice] [pid 11416] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[We May 01 18:18:16.238779 2019] [ssl:emerg] [pid 11416] AH02311: Fatal error initialising mod_ssl, exiting. See /etc/httpd/logs/ssl_error_log for more information
。 "/ var/log/httpd/ssl_error_log"
[Wed May 01 18:18:16.238749 2019] [ssl:emerg] [pid 11416] AH01895: Unable to configure verify locations for client authentication
別のコンテキストで構築された証明書を使用し、Apacheを再起動しましたが、エラーは表示されませんでした。
つまり、エラーは証明書にあるはずです。
そのため、CAの構築に使用した手順を注意深く再確認し(この回答の最後に手順を追加します)、エラーを見つけました。
cacert.pem
の代わりに「一時的な」証明書を使用していました。
CAを作成する手順:
openssl genrsa -des3 -out /etc/pki/CA/private/cakey.pem
openssl req -new -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/ca.crt
openssl x509 -req -days 100 -in ca.crt -out cacert.pem -signkey private/cakey.pem