Rye で invalid peer certificate が出るので、インストールできない

概要

Rye は python でまともなプロジェクトを作るうえで非常に都合がよさそう。venv や pipenv、poetry などを組み合わせて python のバージョン管理とパッケージのバージョン管理を行うよりずっとスマートなやり方だと思う。 そう思ったので、Rye をインストールしてみた。ところが、インストーラを実行したところで、下記のように invalid peer certificate エラーが出てしまう。

解決方法

前提条件

  • Windows 11
  • edge
  • 先ほどのエラー画面の下記黄色部分にブラウザでアクセスしても弾かれないこと

具体的な処置

インストーラでインストールに失敗しているので、cmd で rye self uninstall を行って Rye をアンインストールしておく。

②上記の黄色サイトにアクセスする。パッケージのインストール順序によって違うパッケージのサイトが表示されるが、pypi サイトなので、何でもよい。

③左上の鍵マークをクリック

④接続がセキュリティで保護されていますをクリックし、さらに右上の証明書マークをクリック ⑤証明書ビューアーが出るので、"詳細"タブをクリック。階層式の証明書が表示される。

⑥証明書の階層を pypi.org からたどっていき、最も上のルート証明書を選択し、選択された状態のまま、ウィンドウ右下のエクスポートをクリックして、ルート証明書を crt 形式でダウンロードする。

環境変数にて、SSL_CERT_FILE に ダウンロードした crt ファイルを指定する。

⑧Rye のインストーラを実行(今度はエラーが出ない)

原因

UV という pip の代替ツールが Rye のパッケージインストーラーとして動いている。 UV はデフォの証明書として webpki-roots crate という UV に使われている Rust クレートの証明書を用いることが記載されている。 docs.astral.sh

この証明書が弾かれてしまうと、Rye のインストール時に UV がパッケージインストールに失敗してしまう。 Rye の 0.39.0 では UV の代わりに pip-tool を使用するオプションがあるが、インストール時には必ず UV を使ってしまうようで、インストールの瞬間には使うことはできなかった。

環境変数SSL_CERT_FILE を指定すると、指定した証明書を使用することができる旨が記載されている。

docs.astral.sh

証明書に関して、指定する証明書はルート証明書である必要がある。ルート証明書じゃないものを使用しても失敗した。ルート証明書までたどり着けなかったので失敗したと推察している。

感想

証明書周りのことを結構わかってなかったので、「食べる!SSL!」を読んで勉強した。インターネット屋、ウェブ屋さんではないので、かなり読みやすかった。いい勉強になった。