安いSSL大好きな身の回りで数件起きたのでメモしておきます。
症状
- アルファSSL/KingSSLなどGlobalSignがルートに入っている証明書を更新したら一部デバイスからSSLでアクセスできなくなった
※多分、GMOグローバルサイン/グローバルサインの名称で販売しているもの(お高い系)でも同様です。
原因
- アルファSSL/KingSSLで利用しているGlobalSignのルート証明書が変更された(2024/1/29以降発行分)
- クライアント側のOSに新しいルート証明書が含まれていない(OS更新やCA更新がされていない)
解決方法
以下の4パターンになるかと思います。
1.SSLの証明書のチェックを無効化
本当はよく無いですよねー。手元でコード直せるような環境の場合の暫定対応です。
- curlコマンドに
-k
オプションを付加する - phpの場合は以下のようにする
$curl=curl_init(); curl_setopt($curl,CURLOPT_URL,$url); curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false); curl_exec($curl);
2.クライアントにルート証明書の追加
基本的にCAが更新されていないので、これ以外の場合にも影響する可能性がありますのでパッケージ更新や新しいOSへのアップグレードなどが最善です。が、アクセス元がIoTデバイスや他社サーバーの場合には、なかなか難しいですよね。
-
パッケージ更新(ubuntu)
sudo apt install ca-certificates
-
手動追加
ルート証明書/中間証明書を取得しインストールするUbuntuの場合cp (証明書ファイル名) /usr/local/share/ca-certificates sudo update-ca-certificates
3.クロスルート証明書を付加
クロスルート証明書を付加する事で、証明書を有効にします。対応方法としては、サーバー側だけで済むので一番簡単です。が、将来的にはCA更新が必要ですよね。あと、翌年の設定漏れに注意が必要です。
中間証明書のcrtを以下のように連結してクロスルート証明書にして設置します。基本的にはR3-R6だけで問題無いはずです(相当古くない限り
-----BEGIN CERTIFICATE-----
中間CA証明書
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
R3-R6クロスルート証明書
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
R1-R3クロスルート証明書
-----END CERTIFICATE-----
参考
4.他のSSLを使う
GlobalSignの問題なので、サクッと他のRoot証明書に紐づいているSSL証明を使います。お金で解決する方法です。ただし、ブランドが異なってもルートがGlobalSignだと解決しないので注意しましょう。
- COMODO Positive SSL(Sectigo->USERTrust)
- FUJI SSL(SECOM Trust)
などがお手頃かと。
ぶつぶつ
同様の現象はLet's Encryptでも2021年にDST Root CA X3
からISRG Root X1
に切り替わった際、古いデバイスからのアクセスができなくなりました。
インターネットにアクセスするデバイスは定期的に更新されることが望ましい(証明書やセキュリティアップデート)という事ですし、固定用途であれば独自の証明書をインストールするなどの方が良いという事ですね。