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 を指定すると、指定した証明書を使用することができる旨が記載されている。
証明書に関して、指定する証明書はルート証明書である必要がある。ルート証明書じゃないものを使用しても失敗した。ルート証明書までたどり着けなかったので失敗したと推察している。
感想
証明書周りのことを結構わかってなかったので、「食べる!SSL!」を読んで勉強した。インターネット屋、ウェブ屋さんではないので、かなり読みやすかった。いい勉強になった。