Windowsのcygwin/MSYS2/RでSSL証明書問題の解消

ネットワークの制限の関係で、中間者傍受を許容する設定での運用になっていたとします。そこでのWindowsの設定は、いわゆるオレオレ証明書を『信頼されたルート証明機関』に配置をすることになります。Windowsと親和性が高いアプリでしたら、ほぼそれですべて解決するのですが、残念ながらそうでないものがいくつかありましたので、その解決方法をまとめておきたいと思います。

Cygwin


wgetとかcurlをやっているときにSSLがどうたらというエラーを吐いて死ぬので気が付きます。stack overflowに書いてあるやり方でうまくいきます。

$ cp ca.crt /etc/pki/ca-trust/source/anchors/ # オレオレ証明書を配置
$ update-ca-trust # 加えたオレオレ証明書の内容を証明書溜り(/etc/pki/ca-trust/extracted/openssl)に追加

もしupdate-ca-trustがなければca-certificatesを導入しましょう。

MSYS2


pacmanが文句を言ってくるところで気が付きました。解消方法はcygwinと同じです。MSYS2のFAQにも解説があります。

R


新しいpackageを導入しようとしたところでミラーの選択をはじめに問われるのですが、そこでインターネットが不通になっている旨 URL 'https://cran.r-project.org/CRAN_mirrors.csv': status was 'SSL connect error' という形でエラーが表示されることが気が付きました。R-3.6からR-4.2に切り替えたところでこのようなエラーが出始めて大変困っていました。これはデフォルトのダウンロード方法()であったwininetが非推奨になり、libcurlへと変わったために起きたようです。

回避方法としてはlibcurlにおとなしくなってもらいます。download.file()関数のヘルプのSecure URLsの項目に詳しい説明がありました(l最新版へのリンクなのでそのうち内容が変わってしまうかもです)。結果的にはibcurlの動作モード(libcurlVersion()で取得できる)がSchannel(OS提供の証明書情報を参照)で動いていたので本来なら問題は生じないはずなのですが、オレオレ証明書が失効リストに引っかかってしまってたようで、curlを--ssl-no-revokeで動かす必要があることがわかりました。結果、Rとしては環境変数の設定として

Sys.setenv(R_LIBCURL_SSL_REVOKE_BEST_EFFORT=TRUE)

とすれば動作するようになりました。毎回コマンドを打ち込むのは面倒なので、起動時に設定されるよう.Rprofileの.Firstに書いておくとよいと思います。

また、あまり良い方法ではないですが、非推奨のwininetに戻すこともできます。

options(download.file.method="wininet")

他にもダウンロード手段をcurlとし、オプション-kで証明書を無視する方法もあります。

May 23, 2023 22:48 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク

コメント

コメントする