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