
当社が顧客のために管理しているサーバーでは、特定の HTTPS URL にアプリケーションがアクセスできません。例:
$ wget https://open-data.bielefeld.de/sites/default/files/alters_und_geschlechtsstruktur_ende2011bismitte2022.csv
--2022-12-21 15:59:58-- https://open-data.bielefeld.de/sites/default/files/alters_und_geschlechtsstruktur_ende2011bismitte2022.csv
Resolving open-data.bielefeld.de (open-data.bielefeld.de)... 194.8.223.72
Connecting to open-data.bielefeld.de (open-data.bielefeld.de)|194.8.223.72|:443... connected.
ERROR: cannot verify open-data.bielefeld.de's certificate, issued by ‘CN=Sectigo RSA Domain Validation Secure Server CA,O=Sectigo Limited,L=Salford,ST=Greater Manchester,C=GB’:
Unable to locally verify the issuer's authority.
To connect to open-data.bielefeld.de insecurely, use `--no-check-certificate'.
複数のプログラム (R および Python スクリプトを含む) でこの問題が発生しますが、デスクトップ ブラウザーから URL に問題なくアクセスできます。ルート証明書または証明書チェーンに問題があると思われます。サーバーは Ubuntu 20.04 LTS を実行しており、すべてのパッケージは最新です。この問題の原因は何でしょうか。また、私側で (安全かつ簡単に) 修正する方法はありますか。
答え1
確かに、証明書が欠落していました。ルート証明書ではなく、中間証明書です。HTTPS サーバーは、応答とともにチェーン内のすべての証明書 (ルートを除く) を送信することになっていますが、一部のサーバーはそうしません。Web ブラウザーは、AIA (Authority Information Access) 追跡* と呼ばれる手法を使用してこれに対処できますが、他の多くのクライアントはこれを実装していません。
Steffen Ulrich がコメントで述べたように、不足している証明書を見つけてシステムにインストールすることができます。
まず証明書を取得します。手動で行う場合は、次のサイトを確認してください。SSLラボ、そして、失われた証明書のフィンガープリントを Google で検索します。証明書は PEM 形式 (BEGIN と END CERTIFICATE で base64 エンコード) である必要があります。手動で実行できることに気付く前に、AIA 経由で証明書を取得するスクリプトも作成しました。https://github.com/jdmansour/fetch-intermediate-certs
次に、Ubuntu/Debian に証明書をインポートするには、証明書を に配置し/usr/share/ca-certificates/extra
(必要な場合はディレクトリを作成)、 を実行しますsudo dpkg-reconfigure ca-certificates
。システム更新時に新しい証明書を信頼するかどうかを尋ねられるので、任意のオプションを選択します。デフォルトは「はい」だと思います。次の画面で、新しい証明書を有効にできます。OpenSSL を使用するほとんどのツールですぐに取得されるはずです。
*) 私の知る限り、Firefox は AIA を実装していませんが、何らかの形でそこでも動作します。