cygwinからopensslを使ってみようとした。
openssl自体は、普通にcygwinのsetupツールからインストールできる。
できるのだが、openssl自体はルート証明書を入れてないということだ。
/usr/ssl/certs/README.RootCerts
The OpenSSL project does not (any longer) include root CA certificates.
Please check out the FAQ:
* How can I set up a bundle of commercial root CA certificates?
リンク先を見ると、ルート証明書は提供してないから、好きにしな、とある。
それだけでは不親切と思ったのか、別のところではこうしている例もあるよ、というリンクがある。
Mozillaの例らしい。
リンク先にはperlのスクリプトがあり、cvsで取ってきて加工するようなのだが・・・。
pserverのところが[EMAIL PROTECTED]になってて、どこだかわからない。
で、みんなどうしているかというと、Mozillaのルート証明書をとってきてるみたいだ。
http://curl.haxx.se/ca/cacert.pem
でも、なんかすっきりしない・・・。
haxxって誰だよー、って気もする。
cacert.pemをテキストエディタで開くと、元データのURLがあった。
こっちはmozilla.orgだから、これを使ってみよう。
http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1
このcertdata.txtを取ってくるのがさっきpserverがわからんといってたところだから、certdata.txtを別でダウンロードして、catで吐きだしたものをスクリプトにすればいいんじゃなかろうかね。
あるいは、curlで取ってくるか(curlって、cat urlの略なのか?)。
1: #!/usr/bin/perl -w
2: #
3: # Used to regenerate ca-bundle.crt from the Mozilla certdata.txt.
4: # Run as ./mkcabundle.pl >; ca-bundle.crt
5: #
6: #original
7: #http://www.mail-archive.com/modssl-users@modssl.org/msg16980.html
8:
9: my $curltxt = 'http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1';
10: my $certdata = 'certdata.txt';
11:
12: #open(IN, "cat $curltxt |")
13: open(IN, "curl $curltxt |")
14: || die "could not check out certdata.txt";
15:
16: my $incert = 0;
17:
18: print<;<EOH;
19: # This is a bundle of X.509 certificates of public Certificate
20: # Authorities. It was generated from the Mozilla root CA list.
21: #
22: # Source: $certdata
23: #
24: EOH
25:
26: while (<;IN>) {
27: if (/^CKA_VALUE MULTILINE_OCTAL/) {
28: $incert = 1;
29: open(OUT, "|openssl x509 -text -inform DER -fingerprint")
30: || die "could not pipe to openssl x509";
31: } elsif (/^END/ && $incert) {
32: close(OUT);
33: $incert = 0;
34: print "\n\n";
35: } elsif ($incert) {
36: my @bs = split(/\\/);
37: foreach my $b (@bs) {
38: chomp $b;
39: printf(OUT "%c", oct($b)) unless $b eq '';
40: }
41: } elsif (/^CVS_ID.*Revision: ([^ ]*).*/) {
42: print "# Generated from certdata.txt RCS revision $1\n#\n";
43: }
44: }
45:
なんとかなりそうだ。
が、これで作ったcrtファイルは900KB近くある。
haxxさんから取ってきたpemは220KBくらい。
むぅ。
ここまで読んでこられて気付いたかもしれないが、私はこの辺りはまったくわかっていない。
pemとかcrtとか出てきても、「ぺむ?」くらいにしか思っていない。
ちょっと調べておかないと痛い目に会いそうだ・・・。
http://ja.wikipedia.org/wiki/X.509
まずよく聞く「X.509」だが、これは証明書の形式みたいなものらしい。
断りがなければ、証明書と言えばX.509の形式なのかな?
で、形式といっても「こんな構造で書け」というようなタイプみたいで、形式に沿っていればテキストでもバイナリでもよく、テキストも暗号化したりしてよいみたいだ。
ここら辺で、さっきのpemとかcrtが出てくるみたいだ。
wikipediaには、CER, DER, PEMはあったけど、CRTがない。
さっきのスクリプトでは、「openssl x509 -text -inform DER -fingerprint」となってるから、certdata.txtにはさまってる\xxxってなってるところがバイナリなのだろう。
-outformの指定がないが、デフォルトがわからん。PEMかDERかNET(Netscape)。。。試すとPEMだった。
haxxさんとの違いは、Signatureのことが書いてあるかどうかみたいな感じがする。
-textオプションをなくすとよさそうだ。
・・・とここまで調べて、haxxさんのところに変換スクリプトの紹介があることに気付いた。
まあ、世の中そんなもんだ。
http://curl.haxx.se/docs/caextract.html
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。