ブラウザが接続をブロックする理由
ウェブサイトにアクセスしようとすると、ChromeによってNET::ERR_CERT_WEAK_SIGNATURE_ALGORITHMという警告が表示され、アクセスが遮断されることがあります。これは単なる一時的な不具合ではありません。ブラウザが、そのサイトのセキュリティ証明書にSHA-1が使用されていることを検出したためです。SHA-1は、すでに数年前から実質的に破綻しているハッシュアルゴリズムです。
Googleは、研究者が「SHAttered」攻撃を実証した後の2017年初頭に、SHA-1を公式に非推奨としました。この概念実証では、2つの異なるファイルから同じSHA-1ハッシュが生成される可能性が示されました。この脆弱性のため、最新のブラウザはSHA-1証明書を偽造されたもの、あるいは信頼できないものとして扱います。サーバーがSHA-1署名を提示した場合、あるいは証明書チェーン内の中間証明書にSHA-1が使用されている場合でも、接続はブロックされます。
エラーの解決方法
このエラーを修正するには、サーバー側のアップデートが必要です。古い証明書をSHA-256で署名された新しいものに置き換える必要があります。以下の手順に従って、証明書の特定と交換を行ってください。
ステップ1:弱い署名の確認
どこに問題があるか推測するのではなく、OpenSSLを使用して、サーバーが実際にどのアルゴリズムを使用しているかを確認できます。ターミナルで以下のコマンドを実行してください。
openssl s_client -connect yourdomain.com:443 | openssl x509 -text -noout | grep "Signature Algorithm"
結果にsha1WithRSAEncryptionと表示された場合、それが原因です。安全なサイトであれば、sha256WithRSAEncryptionまたはecdsa-with-SHA256が返されるはずです。
ステップ2:SHA-256で新しいCSRを生成する
最新のツールの多くはデフォルトでSHA-256を使用しますが、証明書署名要求(CSR)を作成する際には明示的に指定するのが最善です。最低基準として2048ビットのキーを使用してください。
openssl req -new -newkey rsa:2048 -nodes -sha256 -keyout yourdomain.key -out yourdomain.csr
.csrファイルが作成できたら、それを認証局(CA)に提出し、新しくSHA-256で署名された証明書を取得します。
ステップ3:内部認証局の更新
Windows Certificate Servicesを使用している企業環境では、CA自体がボトルネックになっている可能性があります。プライベートCAが依然としてSHA-1証明書を発行している場合は、その設定を更新する必要があります。例えば、Windows CAでは以下のコマンドを実行する必要があるかもしれません。
certutil -setreg ca\csp\CNGHashAlgorithm SHA256
設定を変更した後、Active Directory Certificate Servicesを再起動し、グループポリシーを介してすべてのクライアントマシンにルート証明書および中間証明書を再発行する必要があります。
ステップ4:中間証明書チェーンの監査
メインの証明書には問題がなくても、サーバーが古いSHA-1の中間証明書を送信している場合があります。これは、fullchain.pemやca-bundleファイルを数年間更新していない場合によく起こります。NginxやApacheの設定が、SHA-256の中間証明書のみを含むバンドルを指していることを確認してください。
Nginxの場合、以下のようにファイルを結合します。
cat yourdomain.crt intermediate.crt > fullchain.pem
検証
ウェブサーバーを再起動し、ブラウザのキャッシュをクリアします。その後、修正を確認します。
- Chromeでサイトにアクセスします。
- 鍵アイコン > この接続は保護されています > 証明書は有効です をクリックします。
- 詳細タブを開きます。
- 署名アルゴリズムフィールドを確認します。
PKCS #1 SHA-256 With RSA Encryptionと表示されていれば成功です。
プロアクティブなセキュリティ対策
セキュリティ基準の進化は非常に速いです。12ヶ月ごとにSSL/TLS設定を監査することをお勧めします。SHA-1の修正だけでなく、最新のブラウザでブロック対象となっているTLS 1.0や1.1などの非推奨プロトコルが無効化されていることも確認してください。
複数の証明書を管理している際、移行中にファイルが破損していないかハッシュ値を再確認する必要がよくあります。私はそのために、ToolCraftのハッシュジェネレーターを使用しています。これはSHA-256やSHA-512をサポートする高速なブラウザベースのツールです。データはブラウザ内でローカルに処理されるため、機密性の高いキーや証明書データがコンピュータの外に出ることはありません。
最後に注意点として、Chromeの「thisisunsafe」バイパスは使用しないでください。エラー画面を回避することはできますが、ユーザーを中間者攻撃のリスクにさらすことになります。バイパスするのではなく、根本的な原因である証明書を修正してください。

