CACAnet証明書発行システム


cacanet-talkのみなさま 山崎@CACAnetです。

昨日から本格的にCACAnetのCAの証明書やサーバー証明書の作成作業を開始しました。

まだ、運営方針の面でも技術面でもいろいろと問題がありますが、この段階から公開
して、みなさんのご意見をおうかがいしながら作業を進めていこうと思いますので、
よろしくお願いします。

現在の方針について書いておきます。

■文書による合意と当事者自治の原則

JIPDECが実施している「プライバシーマーク」などと同様に、当事者による文書によ
る合意を徹底的に積み上げるシステムを作り、契約法の枠組みを利用して「当事者自
治」の形で証明書利用者の権利保護やCAの責任範囲の限定などに対処するというアプ
ローチが現実的なのではないかと考えています。

CACAnetのCAおよび全てのRAは一定の(公的?)ガイドラインに準拠した運用規定書
を作成しCACAnetはこれをレビューし、署名して公開することをもってRAの正統性の
根拠とすることを考えています。

こういった話の前提として、CACAnetの証明書は「実印」の印鑑証明よりももっとカ
ジュアルなものであるが、個人情報の保護や日常的な契約や手続きなどにはきちんと
実用的に機能するものにしたいという目的があります。

■RA主義

CACAnetは、CAとしてのサービスを行なうが、実際の証明書の発行はCACAnetと個別の
承認関係を持つRAが行なう。

証明書に関する責任はCACAnetのCAと各RAが分担することになる。

この分担の境界は、証明書のライフサイクルアプローチ(ベリサインCPSなどを参照)
つまり次のような流れの中で、ここまではRAの分担でここからここまではCAの分担と
いう具合に決定されるものになるでしょう。

「証明書申請」→「証明書申請の検査」→「証明書の発行」→「加入者による証明書
の承認」→「証明書の使用」→「証明書の効力停止と廃棄」→「証明書の期間満了と
更新」→(最初にもどる)

(RAとしては、「**医師会」のような法人格を持たない任意団体も含められるよう
にすることを想定しています)

■運営の透明性

NPOの認証局のCACAnetの信頼性は損害補償のような形ではなく、運営の透明性と参加
可能性にあるというアプローチを想定しています。

プライバシー保護とセキュリティ上の問題になる部分を明確に定義したうえで、かな
り徹底した運営情報の公開を考えています。公開するものにはソースコードやサービ
スのスクリプトなども含まれる予定です。

■CAのCPSとRAのCPSの分離

以上のような原則から、CAの証明書には、CACAnetのCAのCPSが記載(リンク)されま
すが、実際にRAから発行されるサーバー証明書やユーザー証明書の中に記載(リンク)
されるCPSは、それを発行したRAのCPSになります。

■RFC2459に可能なかぎり準拠する

現状のクライアントやサーバーの実装よりもとにかくRFCの記載に忠実な証明書とい
うものを作ってみる。それでどうしても問題があるなら現状に合わせた譲歩を行なう。

■CACAnetのOID

CACAnetが電信電話技術委員会(TTC)か取得したOIDは、「0.2.440.200092」です。

■CACAnetのOIDの意味付け

CACAnetのCAのCPSを

CACAnetCACPS=0.2.440.200092.1.1.1

CACAnetのCAのCRLを

CACAnetCACRL=0.2.440.200092.1.1.1.1

CACAnetと関連するRAなどのCPSは、

CPS連番=${CACAnetOID}.1.1.連番

■CACAnetの証明書の構造

 CACAnetの証明書における各フィールドの定義
 
 1)証明書内の標準フィールド
 
 1−1)version
 X.509証明書バージョン番号は3(このフィールドの値は"2")
 
 1−2)serialNumber
 CACAnetは1から順次インクリメントして採番する。
 
 1−3)signature
 RSA+md5 を使用する。
 
 1−4)issuer
 証明書発行者のDN
 "cn=CACAnet CA,ou=CA,o=CACAnet Fukuoka,c=JP"
 を最上位のCAとする。
 
 1−5)validity
 CACAnetで当初想定するEntityは以下のものである。
 鍵長            有効期間
 ・CA                2048bits        5years
 ・SSL Server Certificate    1024bits        1year
 ・S/MIME USR Certificate    1024bits        1year
 
 1−6)subject
 CACAnetで当初想定するEntityは以下のものである。
 ・CA         cn=CACAnet CA,ou=CA,o=CACAnet,c=JP
 ・SSL Server Certificate    dcのみ→ cnでDNS
 ・S/MIME USR Certificate    emailAddress=*,cn=*,ou="RA Name",o=CACAnet,c=JP

 1−7)subjectPublicKeyInfo
 公開鍵データ。RSAを使用する。
 
 1−8)issuerUniqueID
 CACAnetではこのフィールドを使用しない。
 
 1−9)subjectUniqueID
 CACAnetではこのフィールドを使用しない。
 
 2)エクステンションフィールド
 
 Extensions  ::=  SEQUENCE SIZE (1..MAX) OF Extension
 Extension  ::=  SEQUENCE  {
 extnID      OBJECT IDENTIFIER,
 critical    BOOLEAN DEFAULT FALSE,
 extnValue   OCTET STRING  }
 
 2−1)Authority Key Identifier
 
 2−1−1)keyIdentifierの決定法
 subjectPublicKeyを160bitのSHA-1 hssh関数にかけて生成。
 
 2−1−2)authorityCertIssuer
"cn=CACAnet CA,ou=CA,o=CACAnet,c=JP"
 
 2−1−3)authorityCertSerialNumber
 "ou=CA,o=CACAnet,c=JP"の証明書のシリアルナンバー
 
 2−2)Basic Constraints
 CA("ou=CA,o=CACAnet,c=JP")の証明書において、pathLenConstraintsを2に設定。
 critical設定。
#将来的に相互認証のハブになれるようにするためパス長を2にしている。

 id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::=  { id-ce 35 }
 
 AuthorityKeyIdentifier ::= SEQUENCE {
 keyIdentifier             [0] KeyIdentifier           OPTIONAL,
 authorityCertIssuer       [1] GeneralNames            OPTIONAL,
 authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL  }
 
 KeyIdentifier ::= OCTET STRING
 
 2−3)Key Usage
 ・CA
 Key Usage:
 keyCertSign
 cRLSign
 critical設定

 Extended Key Usage:
CA証明書の場合は無し

 ・SSL Server Certificate
 Key Usage:
 digitalSignature
 nonRepudiation
 keyEncipherment
 keyAgreement
 critical設定

 Extended Key Usage:
 id-kp-serverAuth    OBJECT IDENTIFIER ::=   {id-kp 1}
 id-kp-timeStamping    OBJECT IDENTIFIER ::= { id-kp 8 }
 critical設定
 
 ・S/MIME USR Certificate
 Key Usage:
 digitalSignature
 nonRepudiation
 keyEncipherment
 dataEncipherment
 keyAgreement
 critical設定

 Extended Key Usage:
 id-kp-clientAuth    OBJECT IDENTIFIER ::=   {id-kp 2}
 id-kp-codeSigning    OBJECT IDENTIFIER ::=   {id-kp 3}
 id-kp-emailProtection    OBJECT IDENTIFIER ::=   {id-kp 4}
 id-kp-timeStamping    OBJECT IDENTIFIER ::= { id-kp 8 }
 critical設定
 
 
 id-ce-keyUsage OBJECT IDENTIFIER ::=  { id-ce 15 }
 
 KeyUsage ::= BIT STRING {
 digitalSignature        (0),
 nonRepudiation          (1),
 keyEncipherment         (2),
 dataEncipherment        (3),
 keyAgreement            (4),
 keyCertSign             (5),
 cRLSign                 (6),
 encipherOnly            (7),
 decipherOnly            (8) }
 
 
 2−4)Certificate Policies

 id-ce-certificatePolicies OBJECT IDENTIFIER ::=  { id-ce 32 }
 
 certificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation
 
 PolicyInformation ::= SEQUENCE {
 policyIdentifier   CertPolicyId,
 policyQualifiers   SEQUENCE SIZE (1..MAX) OF
 PolicyQualifierInfo OPTIONAL }
 
 CertPolicyId ::= OBJECT IDENTIFIER
 
 PolicyQualifierInfo ::= SEQUENCE {
 policyQualifierId  PolicyQualifierId,
 qualifier          ANY DEFINED BY policyQualifierId }
 
 -- policyQualifierIds for Internet policy qualifiers
 
 id-qt          OBJECT IDENTIFIER ::=  { id-pkix 2 }
 id-qt-cps      OBJECT IDENTIFIER ::=  { id-qt 1 }
 id-qt-unotice  OBJECT IDENTIFIER ::=  { id-qt 2 }
 
 PolicyQualifierId ::=
 OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice )
 
 Qualifier ::= CHOICE {
 cPSuri           CPSuri,
 userNotice       UserNotice }
 
 CPSuri ::= IA5String

http://www.cacanet.org/CPS/cps2000-CACAnetCA.html


 
 UserNotice ::= SEQUENCE {
 noticeRef        NoticeReference OPTIONAL,
 explicitText     DisplayText OPTIONAL}
 
 NoticeReference ::= SEQUENCE {
 organization     DisplayText,
 noticeNumbers    SEQUENCE OF INTEGER }
 
 DisplayText ::= CHOICE {
 visibleString    VisibleString  (SIZE (1..200)),
 bmpString        BMPString      (SIZE (1..200)),
 utf8String       UTF8String     (SIZE (1..200)) }
 

200バイト以内だと、「発行された証明書の信頼度はRAの運用規定書に依存する。
RAの運用規定書はCACAnetによってレビューされる。」でぎりぎりです。

UTF8で書くと、openssl が食べてくれるかな?


 2−5)Policy Mappings
 CACAnetではこのフィールドを使用しない。
 現時点では、Mappingを行う対象がないため、このフィールドは設定しない。
 
 
 2−6)Subject Alternative Name
 CACAnetで当初想定するEntityは以下のものである。
 ・CA                このフィールドを使用しない。
 ・SSL Server Certificate    このフィールドにdNSNameを書き込む
 ・S/MIME USR Certificate    このフィールドにRFC822Nameを書き込む
 
 id-ce-subjectAltName OBJECT IDENTIFIER ::=  { id-ce 17 }
 
 SubjectAltName ::= GeneralNames
 
 GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName
 
 GeneralName ::= CHOICE {
 otherName                       [0]     OtherName,
 rfc822Name                      [1]     IA5String,
 dNSName                         [2]     IA5String,
 x400Address                     [3]     ORAddress,
 directoryName                   [4]     Name,
 ediPartyName                    [5]     EDIPartyName,
 uniformResourceIdentifier       [6]     IA5String,
 iPAddress                       [7]     OCTET STRING,
 registeredID                    [8]     OBJECT IDENTIFIER}
 
 OtherName ::= SEQUENCE {
 type-id    OBJECT IDENTIFIER,
 value      [0] EXPLICIT ANY DEFINED BY type-id }
 
 EDIPartyName ::= SEQUENCE {
 nameAssigner            [0]     DirectoryString OPTIONAL,
 partyName               [1]     DirectoryString }
 
 2−7)Issuer Alternative Names
 CACAnetではこのフィールドを使用しない。
 
 2−8)Subject Directory Attributes
 CACAnetではこのフィールドを使用しない。
 
 
 2−9)Name Constraints
 CACAnetではこのフィールドを使用しない。
 
 
 2−10)Policy Constraints
 requierExplicitPolicyフィールドを使用。
 CACAnetの証明書のpathLenConstraintsが2であるので、3にするのが適当?

 id-ce-policyConstraints OBJECT IDENTIFIER ::=  { id-ce 36 }
 
 PolicyConstraints ::= SEQUENCE {
 requireExplicitPolicy           [0] SkipCerts OPTIONAL,
 inhibitPolicyMapping            [1] SkipCerts OPTIONAL }
 
 SkipCerts ::= INTEGER (0..MAX)
 
 2−11)Extended key usage
 Key Usageとセットで使用。
 
 id-ce-extKeyUsage OBJECT IDENTIFIER ::= {id-ce 37}
 
 ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId
 
 KeyPurposeId ::= OBJECT IDENTIFIER
 
 id-kp OBJECT IDENTIFIER ::= { id-pkix 3 }
 
 id-kp-serverAuth              OBJECT IDENTIFIER ::=   {id-kp 1}
 -- TLS Web server authentication
 -- Key usage bits that may be consistent: digitalSignature,
 --                         keyEncipherment or keyAgreement
 --
 id-kp-clientAuth              OBJECT IDENTIFIER ::=   {id-kp 2}
 -- TLS Web client authentication
 -- Key usage bits that may be consistent: digitalSignature and/or
 --                            keyAgreement
 --
 id-kp-codeSigning             OBJECT IDENTIFIER ::=   {id-kp 3}
 -- Signing of downloadable executable code
 -- Key usage bits that may be consistent: digitalSignature
 --
 id-kp-emailProtection         OBJECT IDENTIFIER ::=   {id-kp 4}
 -- E-mail protection
 -- Key usage bits that may be consistent: digitalSignature,
 --                         nonRepudiation, and/or (keyEncipherment
 --                         or keyAgreement)
 --
 id-kp-timeStamping    OBJECT IDENTIFIER ::= { id-kp 8 }
 -- Binding the hash of an object to a time from an agreed-upon time
 -- source. Key usage bits that may be consistent: digitalSignature,
 --                         nonRepudiation
 
 
 2−12)CRL Distribution Points
 LDAP schemeで指定する。

→ opensslの問題により、httpスキーマに変更?
 
 id-ce-cRLDistributionPoints OBJECT IDENTIFIER ::=  { id-ce 31 }
 
 cRLDistributionPoints ::= {
 CRLDistPointsSyntax }
 
 CRLDistPointsSyntax ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint
 
 DistributionPoint ::= SEQUENCE {
 distributionPoint       [0]     DistributionPointName OPTIONAL,
 reasons                 [1]     ReasonFlags OPTIONAL,
 cRLIssuer               [2]     GeneralNames OPTIONAL }
 
 DistributionPointName ::= CHOICE {
 fullName                [0]     GeneralNames,
 nameRelativeToCRLIssuer [1]     RelativeDistinguishedName }
 
 ReasonFlags ::= BIT STRING {
 unused                  (0),
 keyCompromise           (1),
 cACompromise            (2),
 affiliationChanged      (3),
 superseded              (4),
 cessationOfOperation    (5),
 certificateHold         (6) }
 
 
 2−13)Private Internet Extensions
 
 2−13−1)Authority Information Access
 CACAnetではこのフィールドを使用しない。

-- 

        /|              (
       / |             (
      /  |     -_  *  (
     /   |       -   (
    /____|         (   Shigeichiro Yamasaki
  y--------/      (
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

山崎です。

CACAnetの証明書のテストページができました。
#花田さんに感謝。

[https://www2.cacanet.org:9443/] です。
個人証明書の組み込み用パスワードは cacanet です。
ます、テスト用のCA証明書を組み込んでからチェックをお願いします。

以前のメールで書きましたように、RFC2459に可能なかぎり準拠した形式になってい
ます。「過激なくらいまともな証明書」です。

nsCertTypeなどのネットスケープ固有のエクステンションも一切入れていません。

一点だけ、前回のメールで書いた設定から変っています。extendedKeyUsage をクリ
ティカルでなくしました。他は変っていません。

古いブラウザでうまく動くかどうか心配ですので、前回と同様にぜひ皆さまの環境で
チェックしてみてください。よろしくお願いします。

ある程度の環境でうまく動くようでしたら、この証明書の設定で本物のCACAnetの認
証局の証明書やサーバー証明書、ユーザー証明書を作成したいと思います。

どれくらいの「古いブラウザ」を切り捨てるかということは、議論をして決定したい
と思います。

現在のところ、次の環境でサーバー認証が正常に行えることが確認されています。

IE5(128bit) on Windows NT
IE5(56bit) on Windows98
Netscape 4.72 on Windows NT
Netscape 4.7 on Solaris2.5.1

また、次の環境でクライアント認証まで正常にできることが確認されています。

Netscape Communicator 4.7  on MacOS J1 8.6:正常
Netscape Navigator 4.61  on LINUX   正常


#証明書の中にCPSなどのポインタが埋め込まれていますが、まだ完成していないの
で、ダミーです。CRLも同様です。

-- 

        /|              (
       / |             (
      /  |     -_  *  (
     /   |       -   ( Shigeichiro Yamasaki
    /____|         (
  y--------/      ( http://www.cacanet.org/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~