サーバーのSSL証明書がエラーになる場合(特にFirefoxだけエラーになる場合)→解決

  • 投稿日:
  • 更新日:2019/11/23
  • by
  • カテゴリ:

こんにちは。

私が運営しているサーバーはTinycore Linuxによるセルフホスティングです。

遅ればせながら昨年SSL化しました。さくらインターネットのSSLを利用しています。

その中でも一番安い、JPRSドメイン認証型、1年972円です。

lock.jpg

エラーでハマるッ!

JPRSのSSLは、有効期限が切れる2ヶ月くらい前に案内が来ますので、継続の場合はそのまま申し込めばOkです。

申し込んで支払いを行うと、認証ファイルが表示されるので、これをダウンロードして自分のサーバに置くことでサーバの持ち主が自分であることを認証します。

認証が終わると証明書ファイルがダウンロードできるようになるので、取得してサーバに配備します。

これで終わりかと思ったのですが、なぜか証明書が正しくないというエラーが出ます。

最初は全てのブラウザでエラーが出ていたのですが、そのうちFirefoxだけになりました。

Firefox1.pngこのようなエラー画面になります。「発行者の証明書が不明」だそうです。私はJPRSに身元を証明してもらったのではなかったのか?!

Firefox2.png

こちらが詳細。証明書自体は正しく設置されているように見えます。

原因は中間証明書ッ!

わからないので、さくらインターネットのカスタマーサポートに質問を出して、正座して返事を待ったのですが、蓋を開けてみれば簡単なことでした。

「正しい中間証明書がインストールされていない」

のが原因でした。

って、上のFirefoxの画面にも「サーバーが適正な中間証明書を送信しない可能性があります」って書いてあるやん!!

語るに落ちてる。

というわけで、修正は以下の通りです。

  1. JPRSのサーバ証明書発行サービスのページから中間証明書をダウンロードする。私の場合、「中間CA証明書」の「ドメイン認証型」で、サーバ証明書の日付があっているものをダウンロードします。
  2. ダウンロードした証明書(JPRS_DVCA_G3_PEM.cer)を、Apacheの設定ディレクトリ(例 /usr/local/etc/httpd)に置いて、ssl.confでその証明書ファイルを指定します。方法は以下参照。
  3. Apacheを再起動します。

上記2.には注意が必要です。Apache 2.4.8以降の場合はSSLCertificateChainFileが廃止されているので、中間CA証明書とサーバ証明書を1つのファイルにマージして、SSLCertificateFileにする必要があります。

(Apache 2.4.7以前)

SSLCertificateFile /usr/local/apache2/conf/server.cer
SSLCertificateKeyFile /usr/local/apache2/conf/server.key
SSLCertificateChainFile /usr/local/apache2/conf/JPRS_DVCA_G3_PEM.cer

(Apache 2.4.8以降)

SSLCertificateFile /usr/local/apache2/conf/merged.cer
SSLCertificateKeyFile /usr/local/apache2/conf/server.key

merged.cerファイルはサーバ証明書と中間証明書をマージしたものになります。

-----BEGIN CERTIFICATE-----
MII...サーバ証明書
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MII...中間証明書
-----END CERTIFICATE-----

以下のようにして作成できます。

$ cat server.cer JPRS_DVCA_G3_PEM.cer > merged.cer

上記で一応サイトのSSL対応はできたことになりますが、実際にはWebページを対応させないといけません。

さくらさん回答は的確ッ!

実は、中間証明書は昨年のSSL導入時にもインストールしており、自分で書いた記事を今回ちゃんと読んでいれば防げたエラーでした。

既に設置済みだからと気を抜いたのが敗因です。

今回、さくらインターネットのカスタマーサポートにお世話になったのですが、回答がなかなか的確です。

しかも、私のように年間972円しか払っていないユーザーにもちゃんとメール対応してくれます。

ありがたいですね。

それにしても、Firefoxだけエラーになっていたのが不思議です。

中間証明書はそれぞれサーバ証明書の有効期限に対応したものがあり、Firefoxはその中間証明書の期限対応を厳密にやっているために出たエラーのように見えます。

一方、中間証明書自身にも有効期限があり、昨年から使っていた中間証明書も2028年まで有効ではあります。SafariやChromeなど、中間証明書が間違っていてもエラーの出なかったブラウザは、中間証明書の期限の対応がいい加減なのでしょうかね?

こちらもよく読まれています