github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/crypto/x509/x509.go (about)

     1  // Copyright 2009 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // パッケージx509はX.509規格の一部を実装しています。
     6  //
     7  // 証明書、証明書署名要求、証明書失効リスト、エンコードされた公開および秘密鍵の解析および生成を可能にします。
     8  // チェーンビルダーを備えた証明書検証機能も提供します。
     9  //
    10  // このパッケージはIETF(RFC 2459/3280/5280)によって定義されたX.509技術プロファイルを対象としており、CA/Browser Forum Baseline Requirementsによってさらに制限されています。
    11  // 主な目標は、公に信頼されるTLS証明書エコシステムとそのポリシーおよび制約との互換性を提供することであり、これらのプロファイル外の機能には最小限のサポートしかありません。
    12  //
    13  // macOSおよびWindowsでは、証明書の検証はシステムAPIによって処理されますが、パッケージはオペレーティングシステム間で一貫した検証ルールを適用することを目指しています。
    14  package x509
    15  
    16  import (
    17  	"github.com/shogo82148/std/crypto"
    18  	"github.com/shogo82148/std/crypto/x509/pkix"
    19  	"github.com/shogo82148/std/encoding/asn1"
    20  	"github.com/shogo82148/std/errors"
    21  	"github.com/shogo82148/std/io"
    22  	"github.com/shogo82148/std/math/big"
    23  	"github.com/shogo82148/std/net"
    24  	"github.com/shogo82148/std/net/url"
    25  	"github.com/shogo82148/std/time"
    26  )
    27  
    28  // ParsePKIXPublicKeyはPKIX、ASN.1 DER形式の公開鍵を解析します。エンコードされた公開鍵はSubjectPublicKeyInfo構造体です(RFC 5280、セクション4.1を参照)。
    29  //
    30  // *[rsa.PublicKey] 、 *[dsa.PublicKey] 、 *[ecdsa.PublicKey] 、 [ed25519.PublicKey] (ポインタではない)、または *[ecdh.PublicKey] (X25519用)を返します。
    31  // 将来的にはさらに多くの種類がサポートされるかもしれません。
    32  // この種類の鍵は、一般的に「PUBLIC KEY」というタイプのPEMブロックでエンコードされます。
    33  func ParsePKIXPublicKey(derBytes []byte) (pub any, err error)
    34  
    35  // MarshalPKIXPublicKeyは公開鍵をPKIX、ASN.1 DER形式に変換します。
    36  // エンコードされた公開鍵はSubjectPublicKeyInfo構造体です
    37  // (RFC 5280、セクション4.1を参照)。
    38  //
    39  // 現在サポートされているキータイプは次のとおりです: *[rsa.PublicKey] 、 *[ecdsa.PublicKey] 、 [ed25519.PublicKey] (ポインタではありません)、 *[ecdh.PublicKey] 。
    40  // サポートされていないキータイプはエラーとなります。
    41  //
    42  // この種類のキーは一般的には"type 'PUBLIC KEY'のPEMブロックでエンコードされます。
    43  func MarshalPKIXPublicKey(pub any) ([]byte, error)
    44  
    45  type SignatureAlgorithm int
    46  
    47  const (
    48  	UnknownSignatureAlgorithm SignatureAlgorithm = iota
    49  
    50  	MD2WithRSA
    51  	MD5WithRSA
    52  	SHA1WithRSA
    53  	SHA256WithRSA
    54  	SHA384WithRSA
    55  	SHA512WithRSA
    56  	DSAWithSHA1
    57  	DSAWithSHA256
    58  	ECDSAWithSHA1
    59  	ECDSAWithSHA256
    60  	ECDSAWithSHA384
    61  	ECDSAWithSHA512
    62  	SHA256WithRSAPSS
    63  	SHA384WithRSAPSS
    64  	SHA512WithRSAPSS
    65  	PureEd25519
    66  )
    67  
    68  func (algo SignatureAlgorithm) String() string
    69  
    70  type PublicKeyAlgorithm int
    71  
    72  const (
    73  	UnknownPublicKeyAlgorithm PublicKeyAlgorithm = iota
    74  	RSA
    75  	DSA
    76  	ECDSA
    77  	Ed25519
    78  )
    79  
    80  func (algo PublicKeyAlgorithm) String() string
    81  
    82  // KeyUsageは、与えられたキーに対して有効なアクションのセットを表します。これはKeyUsage*の定数のビットマップです。
    83  type KeyUsage int
    84  
    85  const (
    86  	KeyUsageDigitalSignature KeyUsage = 1 << iota
    87  	KeyUsageContentCommitment
    88  	KeyUsageKeyEncipherment
    89  	KeyUsageDataEncipherment
    90  	KeyUsageKeyAgreement
    91  	KeyUsageCertSign
    92  	KeyUsageCRLSign
    93  	KeyUsageEncipherOnly
    94  	KeyUsageDecipherOnly
    95  )
    96  
    97  // ExtKeyUsageは、与えられたキーに対して有効な拡張アクションのセットを表します。
    98  // ExtKeyUsage*の各定数は、ユニークなアクションを定義しています。
    99  type ExtKeyUsage int
   100  
   101  const (
   102  	ExtKeyUsageAny ExtKeyUsage = iota
   103  	ExtKeyUsageServerAuth
   104  	ExtKeyUsageClientAuth
   105  	ExtKeyUsageCodeSigning
   106  	ExtKeyUsageEmailProtection
   107  	ExtKeyUsageIPSECEndSystem
   108  	ExtKeyUsageIPSECTunnel
   109  	ExtKeyUsageIPSECUser
   110  	ExtKeyUsageTimeStamping
   111  	ExtKeyUsageOCSPSigning
   112  	ExtKeyUsageMicrosoftServerGatedCrypto
   113  	ExtKeyUsageNetscapeServerGatedCrypto
   114  	ExtKeyUsageMicrosoftCommercialCodeSigning
   115  	ExtKeyUsageMicrosoftKernelCodeSigning
   116  )
   117  
   118  // CertificateはX.509証明書を表します。
   119  type Certificate struct {
   120  	Raw                     []byte
   121  	RawTBSCertificate       []byte
   122  	RawSubjectPublicKeyInfo []byte
   123  	RawSubject              []byte
   124  	RawIssuer               []byte
   125  
   126  	Signature          []byte
   127  	SignatureAlgorithm SignatureAlgorithm
   128  
   129  	PublicKeyAlgorithm PublicKeyAlgorithm
   130  	PublicKey          any
   131  
   132  	Version             int
   133  	SerialNumber        *big.Int
   134  	Issuer              pkix.Name
   135  	Subject             pkix.Name
   136  	NotBefore, NotAfter time.Time
   137  	KeyUsage            KeyUsage
   138  
   139  	// Extensionsには生のX.509拡張が含まれています。証明書を解析する際、
   140  	// このフィールドを使用して、このパッケージによって解析されない非致命的な拡張を抽出できます。証明書をマーシャリングする際、Extensionsフィールドは無視されます。ExtraExtensionsを参照してください。
   141  	Extensions []pkix.Extension
   142  
   143  	// ExtraExtensionsには、任意のマーシャル化された証明書にコピーして使用される、拡張機能が含まれています。値は、他のフィールドに基づいて生成される拡張機能を上書きします。証明書の解析時にはExtraExtensionsフィールドは埋められませんが、Extensionsを参照してください。
   144  	ExtraExtensions []pkix.Extension
   145  
   146  	// UnhandledCriticalExtensionsは、解析時に(完全に)処理されなかった拡張IDのリストを含んでいます。このスライスが空でない場合、検証は失敗します。ただし、すべての重要な拡張を理解できるOSライブラリに検証が委任されている場合は除きます。
   147  	//
   148  	// ユーザーはExtensionsを使用してこれらの拡張にアクセスし、処理されたと信じられる要素をこのスライスから削除することができます。
   149  	UnhandledCriticalExtensions []asn1.ObjectIdentifier
   150  
   151  	ExtKeyUsage        []ExtKeyUsage
   152  	UnknownExtKeyUsage []asn1.ObjectIdentifier
   153  
   154  	// BasicConstraintsValidは、IsCA、MaxPathLen、およびMaxPathLenZeroが正常であるかどうかを示す。
   155  	BasicConstraintsValid bool
   156  	IsCA                  bool
   157  
   158  	// MaxPathLen と MaxPathLenZero は BasicConstraints の "pathLenConstraint" の存在と値を指します。
   159  	//
   160  	// 証明書を解析する際に、正の非ゼロの MaxPathLen はフィールドが指定されたことを示し、-1 は指定されなかったことを示し、MaxPathLenZero が true の場合はフィールドが明示的にゼロに設定されたことを示します。MaxPathLen == 0 かつ MaxPathLenZero == false の場合は -1 と同等に扱われるべきです。
   161  	//
   162  	// 証明書を生成する際、未設定の pathLenConstraint は MaxPathLen == -1 または MaxPathLen と MaxPathLenZero の両方にゼロ値を使用することでリクエストすることができます。
   163  	MaxPathLen int
   164  
   165  	// MaxPathLenZeroは、BasicConstraintsValid==trueであるとき、
   166  	// MaxPathLen==0は実際の最大パス長さが0であると解釈されることを示しています。
   167  	// それ以外の場合、この組み合わせはMaxPathLenが設定されていないと解釈されます。
   168  	MaxPathLenZero bool
   169  
   170  	SubjectKeyId   []byte
   171  	AuthorityKeyId []byte
   172  
   173  	// RFC 5280、4.2.2.1(権限情報アクセス)
   174  	OCSPServer            []string
   175  	IssuingCertificateURL []string
   176  
   177  	// Subject Alternate Nameの値。(ただし、パースされた証明書に無効な値が含まれている場合、これらの値は有効ではない場合があります。例えば、DNSNamesの要素が有効なDNSドメイン名であるとは限りません。)
   178  	DNSNames       []string
   179  	EmailAddresses []string
   180  	IPAddresses    []net.IP
   181  	URIs           []*url.URL
   182  
   183  	// 名前の制約
   184  	PermittedDNSDomainsCritical bool
   185  	PermittedDNSDomains         []string
   186  	ExcludedDNSDomains          []string
   187  	PermittedIPRanges           []*net.IPNet
   188  	ExcludedIPRanges            []*net.IPNet
   189  	PermittedEmailAddresses     []string
   190  	ExcludedEmailAddresses      []string
   191  	PermittedURIDomains         []string
   192  	ExcludedURIDomains          []string
   193  
   194  	// CRL配布ポイント
   195  	CRLDistributionPoints []string
   196  
   197  	// PolicyIdentifiers contains asn1.ObjectIdentifiers, the components
   198  	// of which are limited to int32. If a certificate contains a policy which
   199  	// cannot be represented by asn1.ObjectIdentifier, it will not be included in
   200  	// PolicyIdentifiers, but will be present in Policies, which contains all parsed
   201  	// policy OIDs.
   202  	PolicyIdentifiers []asn1.ObjectIdentifier
   203  
   204  	// Policies contains all policy identifiers included in the certificate.
   205  	// In Go 1.22, encoding/gob cannot handle and ignores this field.
   206  	Policies []OID
   207  }
   208  
   209  // ErrUnsupportedAlgorithmは、現在実装されていないアルゴリズムを使用して操作を実行しようとした結果です。
   210  var ErrUnsupportedAlgorithm = errors.New("x509: cannot verify signature: algorithm unimplemented")
   211  
   212  // InsecureAlgorithmErrorは、署名の生成に使用される [SignatureAlgorithm] が安全でないことを示し、署名が拒否されたことを示します。
   213  //
   214  // SHA-1署名のサポートを一時的に復元するには、GODEBUG環境変数に値"x509sha1=1"を含めます。ただし、このオプションは将来のリリースで削除される予定です。
   215  type InsecureAlgorithmError SignatureAlgorithm
   216  
   217  func (e InsecureAlgorithmError) Error() string
   218  
   219  // ConstraintViolationErrorは、証明書によって許可されていない要求された使用方法がある場合に発生します。例えば、公開キーが証明書署名キーではない場合に署名のチェックを行うことなどです。
   220  type ConstraintViolationError struct{}
   221  
   222  func (ConstraintViolationError) Error() string
   223  
   224  func (c *Certificate) Equal(other *Certificate) bool
   225  
   226  // CheckSignatureFromは、c上の署名が親からの有効な署名であるかを検証します。
   227  //
   228  // これは非常に限定的なチェックを行う低レベルAPIであり、完全なパス検証ではありません。
   229  // ほとんどのユーザーは[Certificate.Verify]を使用するべきです。
   230  func (c *Certificate) CheckSignatureFrom(parent *Certificate) error
   231  
   232  // CheckSignatureは署名がsigned fromの公開鍵の有効な署名であることを検証します。
   233  //
   234  // これは証明書に対して妥当性チェックを行わない低レベルのAPIです。
   235  //
   236  // [MD5WithRSA]の署名は拒否され、[SHA1WithRSA]と[ECDSAWithSHA1]の署名は現在受け入れられています。
   237  func (c *Certificate) CheckSignature(algo SignatureAlgorithm, signed, signature []byte) error
   238  
   239  // CheckCRLSignatureは、crlの署名がcからのものであることをチェックします。
   240  //
   241  // Deprecated: [RevocationList.CheckSignatureFrom] を使用してください。
   242  func (c *Certificate) CheckCRLSignature(crl *pkix.CertificateList) error
   243  
   244  type UnhandledCriticalExtension struct{}
   245  
   246  func (h UnhandledCriticalExtension) Error() string
   247  
   248  // CreateCertificateは、テンプレートに基づいて新しいX.509 v3証明書を作成します。
   249  // 現在のテンプレートの以下のメンバーが使用されています:
   250  //
   251  //   - AuthorityKeyId
   252  //   - BasicConstraintsValid
   253  //   - CRLDistributionPoints
   254  //   - DNSNames
   255  //   - EmailAddresses
   256  //   - ExcludedDNSDomains
   257  //   - ExcludedEmailAddresses
   258  //   - ExcludedIPRanges
   259  //   - ExcludedURIDomains
   260  //   - ExtKeyUsage
   261  //   - ExtraExtensions
   262  //   - IPAddresses
   263  //   - IsCA
   264  //   - IssuingCertificateURL
   265  //   - KeyUsage
   266  //   - MaxPathLen
   267  //   - MaxPathLenZero
   268  //   - NotAfter
   269  //   - NotBefore
   270  //   - OCSPServer
   271  //   - PermittedDNSDomains
   272  //   - PermittedDNSDomainsCritical
   273  //   - PermittedEmailAddresses
   274  //   - PermittedIPRanges
   275  //   - PermittedURIDomains
   276  //   - PolicyIdentifiers (see note below)
   277  //   - Policies (see note below)
   278  //   - SerialNumber
   279  //   - SignatureAlgorithm
   280  //   - Subject
   281  //   - SubjectKeyId
   282  //   - URIs
   283  //   - UnknownExtKeyUsage
   284  //
   285  // 証明書は親によって署名されます。親がテンプレートと等しい場合、証明書は自己署名です。pubパラメータは生成される証明書の公開鍵であり、privは署名者の秘密鍵です。
   286  //
   287  // 返されるスライスはDERエンコーディングされた証明書です。
   288  //
   289  // 現在サポートされている鍵のタイプは*rsa.PublicKey、*ecdsa.PublicKey、およびed25519.PublicKeyです。pubはサポートされている鍵のタイプである必要があり、privはサポートされている公開鍵を持つcrypto.Signerである必要があります。
   290  //
   291  // AuthorityKeyIdは、親のSubjectKeyIdから取得されます(存在する場合)、ただし証明書が自己署名でない場合はテンプレートの値が使用されます。
   292  //
   293  // テンプレートからのSubjectKeyIdが空で、テンプレートがCAである場合、SubjectKeyIdは
   294  // 公開鍵のハッシュから生成されます。
   295  //
   296  // PolicyIdentifierとPoliciesフィールドは、両方とも証明書ポリシーOIDをマーシャルするために使用されます。
   297  // デフォルトでは、PolicyIdentifierのみがマーシャルされますが、
   298  // GODEBUG設定の"x509usepolicies"が"1"の値を持つ場合、Policiesフィールドが
   299  // PolicyIdentifierフィールドの代わりにマーシャルされます。Policiesフィールドは、
   300  // コンポーネントが31ビットより大きいポリシーOIDをマーシャルするために使用できます。
   301  func CreateCertificate(rand io.Reader, template, parent *Certificate, pub, priv any) ([]byte, error)
   302  
   303  // ParseCRLは指定されたバイトからCRLを解析します。PEMエンコードされたCRLがDERエンコードされるべき場所に表示されることがよくありますが、この関数は前方にゴミがない限り、PEMエンコーディングを透過的に処理します。
   304  //
   305  // Deprecated: 代わりに [ParseRevocationList] を使用してください。
   306  func ParseCRL(crlBytes []byte) (*pkix.CertificateList, error)
   307  
   308  // ParseDERCRLは与えられたバイトからDER形式でエンコードされたCRLをパースします。
   309  //
   310  // Deprecated: 代わりに [ParseRevocationList] を使用してください。
   311  func ParseDERCRL(derBytes []byte) (*pkix.CertificateList, error)
   312  
   313  // CreateCRLは、指定された失効した証明書のリストを含む、この証明書によって署名されたDERエンコードされたCRLを返します。
   314  //
   315  // Deprecated: このメソッドはRFC 5280準拠のX.509 v2 CRLを生成しません。
   316  // 標準に準拠したCRLを生成するためには、代わりに [CreateRevocationList] を使用してください。
   317  func (c *Certificate) CreateCRL(rand io.Reader, priv any, revokedCerts []pkix.RevokedCertificate, now, expiry time.Time) (crlBytes []byte, err error)
   318  
   319  // CertificateRequestはPKCS #10、証明書署名リクエストを表します。
   320  type CertificateRequest struct {
   321  	Raw                      []byte
   322  	RawTBSCertificateRequest []byte
   323  	RawSubjectPublicKeyInfo  []byte
   324  	RawSubject               []byte
   325  
   326  	Version            int
   327  	Signature          []byte
   328  	SignatureAlgorithm SignatureAlgorithm
   329  
   330  	PublicKeyAlgorithm PublicKeyAlgorithm
   331  	PublicKey          any
   332  
   333  	Subject pkix.Name
   334  
   335  	// Attributesには、以下のCSR属性が含まれています。pkix.AttributeTypeAndValueSETとして解析できます。
   336  	//
   337  	// 廃止予定: 解析および生成には、requestedExtensions属性の代わりにExtensionsおよびExtraExtensionsを使用してください。
   338  	Attributes []pkix.AttributeTypeAndValueSET
   339  
   340  	// Extensionsは、すべてのリクエストされた拡張子を生の形式で保持しています。CSRを解析する際に、このパッケージで解析されない拡張子を抽出するために使用できます。
   341  	Extensions []pkix.Extension
   342  
   343  	// ExtraExtensionsは、任意のCSRにコピーされる拡張機能を含みます。
   344  	// CreateCertificateRequestによってマーシャリングされます。
   345  	// 値は他のフィールドに基づいて生成される拡張機能を上書きしますが、
   346  	// Attributesで指定された拡張機能によっては上書きされます。
   347  	//
   348  	// ExtraExtensionsフィールドはParseCertificateRequestでは使用されず、
   349  	// 代わりにExtensionsを参照してください。
   350  	ExtraExtensions []pkix.Extension
   351  
   352  	// Subject Alternate Nameの値。
   353  	DNSNames       []string
   354  	EmailAddresses []string
   355  	IPAddresses    []net.IP
   356  	URIs           []*url.URL
   357  }
   358  
   359  // CreateCertificateRequestは、テンプレートを基に新しい証明書リクエストを作成します。テンプレートの以下のメンバーが使用されます:
   360  //   - SignatureAlgorithm
   361  //   - Subject
   362  //   - DNSNames
   363  //   - EmailAddresses
   364  //   - IPAddresses
   365  //   - URIs
   366  //   - ExtraExtensions
   367  //   - Attributes (非推奨)
   368  //
   369  // privはCSRに署名するための秘密鍵であり、対応する公開鍵はCSRに含まれます。privはcrypto.Signerを実装しており、そのPublic()メソッドは*rsa.PublicKeyまたは*ecdsa.PublicKeyまたはed25519.PublicKeyを返さなければなりません。(*rsa.PrivateKey、*ecdsa.PrivateKey、またはed25519.PrivateKeyもこれを満たします。)
   370  // 返されるスライスはDERエンコードされた証明書リクエストです。
   371  func CreateCertificateRequest(rand io.Reader, template *CertificateRequest, priv any) (csr []byte, err error)
   372  
   373  // ParseCertificateRequestは与えられたASN.1 DERデータから単一の証明書リクエストを解析します。
   374  func ParseCertificateRequest(asn1Data []byte) (*CertificateRequest, error)
   375  
   376  // CheckSignatureはcの署名が有効かどうかを報告します。
   377  func (c *CertificateRequest) CheckSignature() error
   378  
   379  // RevocationListEntryは、CRLのrevokedCertificatesシーケンスのエントリを表します。
   380  type RevocationListEntry struct {
   381  
   382  	// Raw は revokedCertificates エントリの生のバイトを含んでいます。
   383  	// CRL を解析する際に設定され、CRL を生成する際には無視されます。
   384  	Raw []byte
   385  
   386  	// SerialNumberは失効証明書のシリアル番号を表します。CRLを作成する際に使用され、
   387  	// CRLを解析する際にも設定されます。nilであってはいけません。
   388  	SerialNumber *big.Int
   389  
   390  	// RevocationTimeは証明書の失効日時を表します。
   391  	// CRLを作成する際に使用され、CRLを解析する際に設定されます。
   392  	// ゼロの時間であってはなりません。
   393  	RevocationTime time.Time
   394  
   395  	// ReasonCodeは、RFC 5280 Section 5.3.1 で指定された整数の列挙値を使用して、回復の理由を表します。CRLを作成する場合、ゼロ値はreasonCode拡張機能が省略される結果になります。CRLを解析する際、ゼロ値はreasonCode拡張機能が存在しないこと(0/Unspecifiedのデフォルト回収理由を意味する)を表すか、reasonCode拡張機能が存在し、明示的に0/Unspecifiedの値を含んでいることを表す可能性があります(これはDERエンコーディングルールによらないで発生する可能性がありますが、実際に発生することがあります)。
   396  	ReasonCode int
   397  
   398  	// Extensionsには生のX.509拡張が含まれています。CRLエントリを解析する際、
   399  	// このフィールドを使用して、このパッケージでパースされない非クリティカルな拡張を取得できます。
   400  	// CRLエントリをマーシャル化する際、Extensionsフィールドは無視されます。ExtraExtensionsを参照してください。
   401  	Extensions []pkix.Extension
   402  
   403  	// ExtraExtensionsには、任意のマーシャルされたCRLエントリにコピーするための拡張機能が含まれています。値は、他のフィールドに基づいて生成される拡張機能を上書きします。ExtraExtensionsフィールドは、CRLエントリの解析時には値が設定されません。Extensionsを参照してください。
   404  	ExtraExtensions []pkix.Extension
   405  }
   406  
   407  // RevocationList は RFC 5280 で指定されている [Certificate] Revocation List (CRL) を表します。
   408  type RevocationList struct {
   409  
   410  	// Raw はCRL(tbsCertList、signatureAlgorithm、およびsignatureValue)の完全なASN.1 DERコンテンツを含んでいます。
   411  	Raw []byte
   412  
   413  	// RawTBSRevocationList はASN.1 DERのtbsCertList部分のみを含みます。
   414  	RawTBSRevocationList []byte
   415  	// RawIssuerにはDERエンコードされた発行者が含まれています。
   416  	RawIssuer []byte
   417  
   418  	// Issuerには発行証明書のDNが含まれています。
   419  	Issuer pkix.Name
   420  
   421  	// AuthorityKeyIdは、発行証明書に関連付けられた公開鍵を識別するために使用されます。CRLを解析する際、authorityKeyIdentifier拡張から取得されます。CRLを作成する際には無視されます。拡張は発行証明書自体から取得されます。
   422  	AuthorityKeyId []byte
   423  
   424  	Signature []byte
   425  
   426  	// SignatureAlgorithmは、CRLを署名する際に使用する署名アルゴリズムを決定するために使用されます。
   427  	// もし0の場合、署名キーのデフォルトアルゴリズムが使用されます。
   428  	SignatureAlgorithm SignatureAlgorithm
   429  
   430  	// RevokedCertificateEntriesは、CRLのrevokedCertificatesシーケンスを表します。
   431  	// CRLを作成するときに使用され、CRLを解析するときにも入力されます。
   432  	// CRLを作成する際には、空またはnilである場合、revokedCertificates ASN.1シーケンスはCRLから完全に省略されます。
   433  	RevokedCertificateEntries []RevocationListEntry
   434  
   435  	// RevokedCertificatesはRevokedCertificateEntriesが空の場合、
   436  	// CRL内のrevokedCertificatesシーケンスを埋めるために使用されます。
   437  	// RevokedCertificatesは空またはnilである場合、空のCRLが作成されます。
   438  	//
   439  	// Deprecated: 代わりにRevokedCertificateEntriesを使用してください。
   440  	RevokedCertificates []pkix.RevokedCertificate
   441  
   442  	// Numberは、CRL内のX.509 v2 cRLNumber拡張を埋めるために使用されます。
   443  	// これは特定のCRLスコープとCRL発行者に対して単調に増加するシーケンス番号である必要があります。
   444  	// また、CRLを解析する際には、cRLNumber拡張からも値が入力されます。
   445  	Number *big.Int
   446  
   447  	// ThisUpdateはCRLのthisUpdateフィールドに格納されるために使用され、CRLの発行日を示します。
   448  	ThisUpdate time.Time
   449  
   450  	// NextUpdateはCRLのnextUpdateフィールドを埋めるために使用されます。これは次のCRLが発行される日付を示しています。NextUpdateはThisUpdateよりも大きくなければなりません。
   451  	NextUpdate time.Time
   452  
   453  	// Extensionsは生のX.509拡張を含んでいます。CRLを作成する際は、
   454  	// Extensionsフィールドは無視されます。ExtraExtensionsを参照してください。
   455  	Extensions []pkix.Extension
   456  
   457  	// ExtraExtensionsには、CRLに直接追加する必要がある追加の拡張機能が含まれています。
   458  	ExtraExtensions []pkix.Extension
   459  }
   460  
   461  // CreateRevocationListは、テンプレートに基づいてRFC 5280に準拠した新しいX.509 v2証明書失効リストを作成します。
   462  //
   463  // CRLは、privによって署名されます。これは、発行者証明書の公開キーに関連付けられた秘密キーである必要があります。
   464  //
   465  // 発行者はnilであってはならず、CRL発行者として使用するには [KeyUsage] でcrlSignビットを設定する必要があります。
   466  //
   467  // 発行者の識別名CRLフィールドと権限キー識別子拡張は、発行者証明書を使用してポピュレートされます。発行者にはSubjectKeyIdが設定されている必要があります。
   468  func CreateRevocationList(rand io.Reader, template *RevocationList, issuer *Certificate, priv crypto.Signer) ([]byte, error)
   469  
   470  // CheckSignatureFromは、rlの署名が発行元の有効な署名であることを確認します。
   471  func (rl *RevocationList) CheckSignatureFrom(parent *Certificate) error