VerisignのSGC(server Gated Cryptgraphy)の証明書を発行しよう
2005/1/4作成
SGCは、サーバ証明書の種類で、56bitなど暗号強度が低いブラウザで強制的に128bitの暗号化を利用できるようにしたものです。
現在のところVerisignのみがグローバル・サーバIDとして提供されています。
けっこう質問の多いこのSGCなのですが、当のVerisignにも情報は少なく、googleでもなかなかヒットしないので、技術的な側面と使用方法について独自に検証してみることにしました。
1.証明書の中身を確認
SGCの証明書とはどんなものなのかを確認するために、まずは解析してみることにしました。
Verisignに行ってみたらSGCの証明書が落ちていたので、これの中身を見てみましょう。
やり方はいろいろあると思いますが、Windowsの画面から拾い上げて、opensslが入っているマシンに移してtext表示で見てみました。
% openssl x509 -in verisign.crt -noout -text Certificate: Data: Version: 3 (0x2) Serial Number: 6d:0c:76:c9:8e:3d:4e:3d:b4:b6:a5:93:ae:58:0a:6f Signature Algorithm: md5WithRSAEncryption Issuer: O=VeriSign Trust Network, OU=VeriSign, Inc., OU=VeriSign Interna tional Server CA - Class 3, OU=www.verisign.com/CPS Incorp.by Ref. LIABILITY LTD .(c)97 VeriSign Validity Not Before: Sep 11 00:00:00 2003 GMT Not After : Sep 10 23:59:59 2005 GMT Subject: C=US, ST=California, L=Mountain View, O=VeriSign, Inc., OU=Prod uction Services, OU=Terms of use at www.verisign.com/rpa (c)00, CN=seal.verisign .com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:cc:64:d6:4f:21:7a:de:c4:c3:20:80:c1:13:54: 28:ad:f5:74:61:bf:bf:bd:c4:4a:5d:b5:bb:63:ed: e0:a7:b2:45:ef:42:11:3e:d8:cf:90:f7:04:01:ae: 85:10:7a:e1:59:91:0e:ea:fd:aa:93:0c:a3:74:bc: e8:12:70:f6:b1:58:13:80:73:4b:56:e7:28:12:66: 5a:79:30:8e:3d:47:b1:33:60:6f:cf:67:d9:ce:91: 28:c2:12:d6:8b:1f:da:a4:98:8c:9f:7c:e9:ed:b3: 3b:0b:4b:6c:99:1c:a3:73:57:08:d4:a7:12:1e:de: 8d:28:b9:aa:a7:88:20:8d:89 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE X509v3 Key Usage: Digital Signature, Key Encipherment X509v3 CRL Distribution Points: URI:http://crl.verisign.com/Class3InternationalServer.crl X509v3 Certificate Policies: Policy: 2.16.840.1.113733.1.7.23.3 CPS: https://www.verisign.com/rpa X509v3 Extended Key Usage: Netscape Server Gated Crypto, TLS Web Server Authentication, TLS Web Client Authentication Authority Information Access: OCSP - URI:http://ocsp.verisign.com Signature Algorithm: md5WithRSAEncryption 16:c8:34:d6:5f:eb:48:96:a6:b3:1b:86:15:a9:6a:26:60:e2: b7:ed:2d:a0:c1:48:82:cc:2f:7f:6d:24:9f:51:77:f3:76:3a: 6d:04:bf:da:bb:31:42:21:e0:1a:b0:8c:a6:2c:fd:7a:95:b7: ba:26:39:9f:99:54:57:7b:f8:cd:8d:b2:f1:ac:98:34:e4:f0: 98:6e:3a:90:0a:78:80:3b:77:b4:d2:cc:34:ae:0b:a0:de:20: 34:f7:0c:db:57:96:47:6c:08:7b:13:98:5f:ee:13:f4:1e:31: 3a:b2:83:28:9e:b0:a3:cb:6f:d2:fc:d5:61:0e:49:88:0f:2a: 1d:f3
X509v3 extentions(X509拡張領域)のX509v3
Extended Key Usage(X509拡張鍵使用方法)にNetscape
Server Gated Cryptoとあります。
これがついているものがSGCが使えるサーバ証明書ということになります。
ちなみに、opensslのバージョンが古いと、Netscape
Server Gated Cryptoではなく、OIDとして数字の羅列としてでてくることがあります。
これは古いopensslの場合、ASN.1のOIDデータベースが古いためです。
新しいのを入れれば見られるようになるでしょう。
WindowsXP SP2でも対応するOIDを認識できないため、「不明なキー使用法」と表示されます。
ここではNetscapeのSGCいうものがでていますが他にMicrosoftのSGC(Microsoft
Server Gated Crypto)というのもあって、これは別のエントリとして登録されています。
参考までに、それぞれのASN.1のOIDは次の通りです。
Microsoft Server Gated Crypto 1.3.6.1.4.1.311.10.3.3 Netscape Server Gated Crypto 2.16.840.1.113730.4.1
ちなみにこれらOIDと呼ばれるもののマスタ管理はIANAが行っています。
これの全部が載っているリストが欲しいなと思って調べてみたのですが、どうやら有料のようでした。
しかたがないので、opensslのソースから引っこ抜いて使っています。
"/usr/include/openssl/objects.h"にヒントが書いてあるので、これから引っこ抜くためのスクリプトを作ればOKです。
見てみると証明書にいろいろな用途があることに驚きです。
IANA管理外で独自のOIDを割りあてて運営しているケースももちろんあるでしょう。
2.SGC証明書を発行してみる
では、SGCのフラグをたてて証明書を発行してみましょう。
Verisignの専売特許のはずですが、実は発行するだけならopensslでもできます。
プライベートCAの構築をみながら新たにCAをたてて行きます。
せっかくなので今回は玄箱に作ってみましたが、特に手順は変わりません。
# openssl genrsa -rand /var/log/messages -out ca.key 1024
# openssl req -new -x509 -key ca.key -out ca.crt -days 365 -sha1
reqを出すと、玄箱のopenssl.cnfが/usr/lib/ssl/openssl.cnfだと言われますが、実はそれはシンボリックリンクになっていて、結局は/etc/ssl/openssl.cnfに行き着くので安心してください。
ちなみに前回の特集と変わったところですが。
前回書ききれなかったところですね。
あとはプライベートCA構築の手順に従って秘密鍵を所定のフォルダに格納していきます。
前置きが長くなりましたがこれでサーバ証明書を発行できます。
# openssl genrsa -out example.key 1024
# openssl req -new -key example.key -out example.csr
と、csrを作るところまではこれまでどおりです。
ここでかくし味をopenssl.cnfに入れてあげましょう。
# /etc/ssl/openssl.cnf
〜省略〜
[ usr_cert ]
basicConstraints=CA:FALSE
extendedKeyUsage = msSGC, nsSGC, serverAuth, clientAuth
〜以下略〜
といった具合に、[usr_cert]のところにextendedKeyUsageを使うことで鍵用途拡張が容易に行えます。
msSGCがMicrosoftのSGCでnsSGCがネットスケープのSGCです。
このシンボルも/usr/include/openssl/objects.hにヒントがあるので探してください。
編集が終わったらopensslコマンドのCAモードで証明書を発行しましょう。
# openssl ca -out example-ca.crt -infiles example.csr
では確認しましょう。
# openssl x509 -in example-ca.crt -noout -text Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C=JP, ST=Tokyo, O=yggdrasil.jp CA, CN=KURO-BOX CA Validity Not Before: Jan 4 11:33:38 2005 GMT Not After : Jan 4 11:33:38 2006 GMT Subject: C=JP, ST=Tokyo, O=yggdrasil.jp CA, CN=www.example.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b6:21:34:f3:21:6e:a9:ae:42:c6:d8:74:b2:33: cf:5c:15:51:e2:d1:62:c9:5b:46:88:90:d5:01:2b: d1:ca:2b:e3:52:f8:58:94:ed:2c:fa:52:6c:24:68: 13:4e:f8:05:86:2b:d9:c2:f0:68:85:33:5f:a0:c6: 5e:18:cf:dc:ab:ad:f7:c1:78:41:76:49:06:71:75: e4:50:94:32:c0:67:23:38:d4:c7:97:fd:d6:89:b3: 1e:09:4f:54:40:c4:2c:6a:ea:26:08:25:79:cd:18: ee:5e:cb:f1:40:a5:8c:77:70:6a:44:05:49:05:ac: 90:90:ee:0b:37:0b:21:2b:93 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE X509v3 Extended Key Usage: Microsoft Server Gated Crypto, Netscape Server Gated Crypto, TLS Web Server Authentication, TLS Web Client Authentication X509v3 Subject Key Identifier: C0:AB:8E:3F:E9:F3:00:B6:BC:23:72:0A:56:14:A1:C9:CF:35:A8:18 X509v3 Authority Key Identifier: keyid:41:A6:E8:CC:1D:5C:C6:B3:4A:FD:3D:97:D4:7C:8F:49:F4:54:23:6C DirName:/C=JP/ST=Tokyo/O=yggdrasil.jp CA/CN=KURO-BOX CA serial:00 Signature Algorithm: sha1WithRSAEncryption 9a:5f:90:ca:8f:62:30:0d:32:1d:30:66:b7:b7:3d:53:cc:8a: 5c:7d:23:e2:f6:04:05:87:9f:12:4d:e5:2d:ca:4a:82:3e:c6: c8:ef:8c:ef:55:16:83:4b:86:d0:c0:c0:a3:e7:28:cc:58:85: f0:da:9a:3f:d2:c8:e5:f4:6d:d7:d1:ab:b2:f0:93:75:93:9a: f2:ad:a0:74:1c:0b:84:db:22:21:5a:a0:c6:dd:57:f5:df:2b: 54:db:b5:ac:e0:b0:f7:3c:22:d2:d0:ed:db:36:31:cc:86:b8: b9:57:d4:6b:bb:3d:98:5b:85:d4:70:64:7f:7b:3e:81:51:b5: 76:34
無事にx509v3 ExtendedKeyUsageにMSのSGCとネスケのSGCが書き込まれました。
なんとこれっぽっちのことでSGC対応の証明書の発行はできてしまいました。
とくにVerisignの営業妨害をするつもりは毛頭ないですが、SGC対応の証明書といってもそんなたいそうなものではなく、証明書を発行するときにちょっぴりごにょごにょしてるだけなんですよ。
重要なのは、このあとのプロトコル編です。
だいぶ長くなってしまいましたので、いったんここで切って、プロトコル解析は次の話題に持ち越しです。