
私は Raspberry Pi (Debian) 上の Apache で Web ページをホストしていますが、サーバーが現在の証明書を発行できないようです。私は次のようにして自己署名 SSL 証明書を生成しました/home/pi/ssl/
:
openssl req -new -sha256 -x509 -nodes -days 365 -out example.com.pem -keyout example.com.key
Apache は、次の内容を含むファイル から.pem
およびファイル のペアを検索します。.key
/etc/apache2/sites-enabled/owncloud.conf
SSLCertificateFile /home/pi/ssl/example.com.pem
SSLCertificateKeyFile /home/pi/ssl/example.com.key
これらのファイルを削除して Apache を再起動すると、エラーが発生します[FAIL] Reloading web server config: apache2 failed!
。新しい証明書ファイル ペアが生成された後に再起動するとこのエラーは発生しないため、Apache は証明書を呼び出しているようです。
ただし、ブラウザ (Chrome シークレット モードや FF/Safari プライベート ウィンドウ、さらにはこれまでドメインを要求したことのないコンピュータ上のブラウザ) に表示される証明書は、1 か月前に生成した古い証明書です - 以下を参照してください。
なぜこのようなことが起こるのか、何か考えはありますか?
答え1
発行された証明書は、何らかの理由で、Apache のデフォルトの「snakeoil」証明書であることが判明しました。私は次のようにしてこれを確認しました。
grep -i -r "SSLCertificateChainFile" /etc/apache2/
/etc/apache2/sites-available/default-ssl
.. は、sneakoil 証明書を参照するファイルから 2 行を返しました。これらの行をコメント アウトすると、ブラウザーはカスタマイズされた証明書を返すようになりました。
答え2
このような問題の一般的な原因は、Apache の複数のインスタンスが実行中であることです。設定の変更は (再) 起動したプロセスによって取得されますが、リクエストは古い設定で実行されている古いプロセスによって処理されます。
サービスを停止します:
service apache2 stop
サイトにまだアクセスできるかどうかを確認します。アクセスできる場合は、原因が特定されたことになります。
今すぐ実行
ps aux | grep apache
実行中の apache2 プロセスとその PID のリストが表示されます。それらをすべて強制終了します (このコマンドは、Apache Tomcat のように、名前やユーザー名などに Apache が含まれる無関係なプロセスも返す場合があるので、それらを強制終了しないことをお勧めします)。
kill <pid>
ps aux を再度実行し、プロセスが実行されていないことを確認します。
サイトにアクセスできるかどうかを再度確認してください。アクセスできないはずです。
Apacheサービスを開始します
service apache2 start
新しい証明書が提供されていることを確認します。
プロセスを強制終了したくない場合は、システムを再起動してください。同じ効果が得られます。