CA 証明書

Mercurial における https URL の SSL 証明書の扱いについて。

1. Mercurial 1.7.x での変更点

Mercurial は 1.7.x 系で HTTPS サポートを改善しました。 HTTPS サーバー接続時にサーバー証明書をきちんと確認し、身元が不確かな場合は接続を拒否するようになりました。ただし、認証局(CA)について設定されている場合に限ります。 Mercurial 1.7.3 以降では、 CA の設定がされていない場合は警告を表示します。

{i} "certificate not verified" という警告が表示されるようになっても、以前より安全でなくなったという意味ではありません。 以前から安全ではなかったと通知しているだけです。

SSL に求めてた安全性を得るため(そして、警告を消すため)には、設定を直す必要があります。 そうでなければ、 HTTPS を使う意味はないでしょう。

2. HTTPS 認証局の設定

オペレーティングシステムはたいてい、信頼できるルート証明書を保持しています。 なお、その認証局はどんなサーバーの身元であっても承認しようと思えば可能であり、ひいてはどんなサーバーの身元情報であっても成りすますことができることを述べておきます。

Add the lines below to your configuration file (such as /etc/mercurial/hgrc on Unix-like systems).

2.1. Debian/Ubuntu/Gentoo/Arch Linux

Debian、Ubuntu、Gentoo、Arch Linux では、以下のグローバル設定を利用できます:

[web]
cacerts = /etc/ssl/certs/ca-certificates.crt

2.2. Fedora/RHEL

Fedora と RHEL では、以下のグローバル設定を利用できます:

[web]
cacerts = /etc/pki/tls/certs/ca-bundle.crt

2.3. openSUSE/SLE

Suse should already ship hg with included link to the ssl bundle, else use this global configuration:

[web]
cacerts = /etc/ssl/ca-bundle.pem

2.4. Mac OS X before 10.6

You can generate the file you need by opening Keychain Access (from /Applications/Utilities), going to the System Roots keychain, selecting everything and then choosing Export Items... from the File menu. Make sure the File Format is set to Privacy Enhanced Mail (.pem), then save it to your Desktop as Certificates. Next, in Terminal enter

sudo cp ~/Desktop/Certificates.pem /etc/hg-ca-roots.pem

then configure Mercurial as follows:

[web]
cacerts = /etc/hg-ca-roots.pem

Note that because the vendor supplied set of CA root certificates on Mac OS X is in the system keychain, you may wish to repeat these steps after installing software updates if they include changes to the root certificate list.

2.5. Mac OS X 10.6 and higher

On Mac OS X 10.6 and higher, OpenSSL (which is what Python and therefore Mercurial use to implement their SSL support) will look in the system keychain. Unfortunately, the SSL code in the Python core doesn't allow for this situation---it always expects you to specify a certificate bundle, and if one is specified if must contain at least one certificate. A simple way to deal with this problem is to enter (in Terminal)

openssl req -new -x509 -extensions v3_ca -keyout /dev/null -out dummycert.pem -days 3650

to generate a dummy certificate (the contents don't matter, so you can just hit return at all of the prompts), then

sudo cp dummycert.pem /etc/hg-dummy-cert.pem

and set your configuration as follows:

[web]
cacerts = /etc/hg-dummy-cert.pem

Don't download a dummy certificate someone on the Internet has created to solve this problem unless you're certain that they're trustworthy; if they kept the private key, they would be able to sign certificates that Mercurial would trust. Better just to enter the commands above.

If you have trouble getting a dummy certificate to work, see below on how to work around the issue with host certificate fingerprints.

2.6. Windows

Mercurial 1.7.3 の Windows インストーラー(と対応する TortoiseHg インストーラー)はデフォルトで安全になっています。接続先サーバーの身元が正しいかどうか、ルート証明書で確認します。

Mercurial 1.7.3 のインストーラー(と対応する TortoiseHg インストーラー)には cacert.pem がパッケージされており、デフォルトで web.cacertshgrc.d\paths.rc に設定します。そのため、自己署名証明書を提示したリポジトリへの接続は拒否されます。 この場合は、デフォルトの設定を適宜修正する必要があります。

2.7. 他のプラットフォーム

あなたのプラットフォームが適当な CA リストを提供していなければ、 cacert ファイルを http://curl.haxx.se/docs/caextract.html や他の信頼できる場所より手可能です。

2.8. Other Certificate Authorities

If want to trust other CAs you must make sure their root certificates are in your web.cacerts. For example, cacert.org が発行したサーバー証明書を利用している場合は、 ルート証明書 (PEM 形式) をダウンロード後、それを使うように Mercurial の設定を変更する必要があります。

2.9. 自己署名証明書

必要に応じて cacert ファイルをカスタマイズし、例えば信頼しない CA を削除したり自分のイントラまたは自己署名認証局を追加したりしてください。 cacerts ファイルを複数指定することはできないため、 web.cacerts をユーザーまたはリポジトリ設定で上書きすると良いでしょう。

サーバーのルート CA 証明書は、例えば Firefox では次のように取得できます。 https://server/repo へアクセスし、あなたが信頼するリポジトリであることを確認後、右下の錠アイコンをクリックします。証明書を表示→詳細→証明書の階層の一番上を選択→エクスポート→「X.509 証明書 (PEM)」で例えば server.pem という名前で保存します。 Windows (XP) の他のブラウザでは、証明パスの最上位の証明書を表示し、「Base-64 エンコードした X.509 (.CER)」として「ファイルへコピー」する必要があります。 必要に応じて、できたファイルを 1 つの cacerts ファイルへまとめると良いでしょう。

注: IIS7 で生成した自己署名証明書は、 OpenSSL/Python ひいては Mercurial で動作しないかもしれません。 有効な CA 証明書に必要な情報について見解の相違があるようです。 代わりに、 OpenSSL でサーバー証明書と CA 証明書を作るようにしてください。

{i} 単一の PEM エンコードされた証明書の内容を表示するには、以下のようにしてください

3. リポジトリごとの設定

あなたが認証あるいは pull するサーバーの成りすましについて、より積極的にコントロールしたければ、ローカル clone ごとに信頼できる CA を設定することが可能です。

ローカルリポジトリの .hg/hgrc を開いて、下記を追加してください:

[web]
cacerts = /path/to/server.pem

注: Mercurial 1.7.3 以降が必要です。

4. Host certificate fingerprints

With Mercurial 1.7.4 a new method for verification of server identify was introduced. The warnings given for insecure https connections will show the fingerprint of the server certificate, and when such a fingerprint is configured for a hostname in the hostfingerprints section Mercurial will verify for all connections to that server that its certificate matches the fingerprint.

For example, for https://hg.intevation.org/mercurial/crew+main/ :

[hostfingerprints]
hg.intevation.org = fa:1f:d9:48:f1:e7:74:30:38:8d:d8:58:b6:94:b8:58:28:7d:8b:d0

5. 自己署名証明書に対する安全性確認を手動でスキップ

/!\ はっきり言って危険です。

自己署名証明書を提示したホストに対処するためなどで、安全性の確認を無効にしたいこともあるでしょう。CA 証明書の設定をコマンドラインから無効にすれば可能です:

hg push --config web.cacerts= https://self-signed-host/repo

A --insecure option was introduced with Mercurial 1.7.5 so you can do:

hg push --insecure https://self-signed-host/repo

6. HTTP プロキシーサポート

Mercurial 1.8 will also verify certificates for HTTPS connections made with CONNECT through HTTP proxies.

7. SMTP TLS 証明書

Mercurial 2.6 より SMTP 接続時も SSL/TLS 証明書を確認するようになりました。

8. 参考


CategoryJapanese

English

JapaneseCACertificates (last edited 2014-02-22 04:24:28 by YuyaNishihara)