ErrUnsupportedAlgorithm は,現在実装されていないアルゴリズムを含む操作を実行しようとした結果です。
var ErrUnsupportedAlgorithm = errors.New("x509: cannot verify signature: algorithm unimplemented")
不正なパスワードが検出されると, IncorrectPasswordError が返されます。
var IncorrectPasswordError = errors.New("x509: decryption password incorrect")
func CreateCertificate(rand io.Reader, template, parent *Certificate, pub, priv interface{}) (cert []byte, err error)
CreateCertificate はテンプレートに基づいて新しい X.509v3 証明書を作成します。 以下のテンプレートのメンバーが使用されます。
- AuthorityKeyId - BasicConstraintsValid - CRLDistributionPoints - DNSNames - EmailAddresses - ExcludedDNSDomains - ExcludedEmailAddresses - ExcludedIPRanges - ExcludedURIDomains - ExtKeyUsage - ExtraExtensions - IsCA - IssuingCertificateURL - KeyUsage - MaxPathLen - MaxPathLenZero - NotAfter - NotBefore - OCSPServer - PermittedDNSDomains - PermittedDNSDomainsCritical - PermittedEmailAddresses - PermittedIPRanges - PermittedURIDomains - PolicyIdentifiers - SerialNumber - SignatureAlgorithm - Subject - SubjectKeyId - URIs - UnknownExtKeyUsage
証明書は親によって署名されています。 parent が template と等しい場合,証明書は自己署名されています。 パラメータ pub は署名者の公開鍵であり, priv は署名者の秘密鍵です。
返されるスライスは DER エンコーディングの証明書です。
現在サポートされているキータイプは, *rsa.PublicKey, *ecdsa.PublicKey,および ed25519.PublicKey です。 pub はサポートされているキータイプである必要があり, priv はサポートされている公開キーを持つ crypto.Signer である必要があります。
結果の証明書が自己署名されていない限り, AuthorityKeyId は,もしあれば parent の SubjectKeyId から取得されます。 それ以外の場合は, template の値が使用されます。
func CreateCertificateRequest(rand io.Reader, template *CertificateRequest, priv interface{}) (csr []byte, err error)
CreateCertificateRequest は,テンプレートに基づいて新しい証明書リクエストを作成します。 以下のテンプレートのメンバーが使用されます。
- SignatureAlgorithm - Subject - DNSNames - EmailAddresses - IPAddresses - URIs - ExtraExtensions - Attributes (deprecated)
priv は CSR に署名するための秘密鍵であり,対応する公開鍵は CSR に含まれます。 これは crypto.Signer を実装しなければならず,その Public() メソッドは *rsa.PublicKey または *ecdsa.PublicKey または ed25519.PublicKey を返さなければなりません。 (*rsa.PrivateKey, *ecdsa.PrivateKey または ed25519.PrivateKey がこれを満たします。)
返されたスライスは, DER エンコーディングの証明書リクエストです。
func DecryptPEMBlock(b *pem.Block, password []byte) ([]byte, error)
DecryptPEMBlock は,パスワードで暗号化された PEM ブロックとそれを暗号化するために使用されたパスワードを受け取り,復号化された DER でエンコードされたバイトスライスを返します。 復号化に使用されるアルゴリズムを決定するために DEK-Info ヘッダーを調べます。 DEK-Info ヘッダが存在しない場合,エラーが返されます。 誤ったパスワードが検出された場合, IncorrectPasswordError が返されます。 暗号化された PEM 形式には欠陥のために,誤ったパスワードを検出できるとは限りません。 このような場合,エラーは返されませんが,復号化された DER バイトはランダムノイズになります。
func EncryptPEMBlock(rand io.Reader, blockType string, data, password []byte, alg PEMCipher) (*pem.Block, error)
EncryptPEMBlock は,指定されたアルゴリズムとパスワードで暗号化された,指定された DER エンコードデータを保持している指定された型の PEM ブロックを返します。
func IsEncryptedPEMBlock(b *pem.Block) bool
IsEncryptedPEMBlock は,PEM ブロックがパスワードで暗号化されているかを報告します。
func MarshalECPrivateKey(key *ecdsa.PrivateKey) ([]byte, error)
MarshalECPrivateKey は EC 秘密鍵を SEC 1, ASN.1 DER 形式に変換します。
この種類のキーは,一般にタイプ "EC PRIVATE KEY"の PEM ブロックにエンコードされます。 EC 固有ではない,より柔軟なキー形式については,MarshalPKCS8PrivateKey を使用してください。
func MarshalPKCS1PrivateKey(key *rsa.PrivateKey) []byte
MarshalPKCS1PrivateKey は, RSA 秘密鍵を PKCS#1, ASN.1 DER 符号化形式に変換します。
この種類のキーは,一般に "RSA PRIVATE KEY" タイプの PEM ブロックにエンコードされます。 For a more flexible key format which is not RSA specific, use MarshalPKCS8PrivateKey.
func MarshalPKCS1PublicKey(key *rsa.PublicKey) []byte
MarshalPKCS1PublicKey は, RSA 公開鍵を PKCS#1 の ASN.1 DER 形式に変換します。
この種類のキーは,一般に "RSA PUBLIC KEY" タイプの PEM ブロックにエンコードされます。
func MarshalPKCS8PrivateKey(key interface{}) ([]byte, error)
MarshalPKCS8PrivateKey は, RSA 秘密鍵を PKCS#8, ASN.1 DER 形式に変換します。
次のキー型がサポートされています: *rsa.PrivateKey, *ecdsa.PrivateKey, そして ed25519.PrivateKey 。 サポートされていないキー型はエラーになります。
この種類のキーは,一般に "PRIVATE KEY" タイプの PEM ブロックにエンコードされます。
func MarshalPKIXPublicKey(pub interface{}) ([]byte, error)
MarshalPKIXPublicKey は,公開鍵を PKIX, ASN.1 DER 形式に変換します。
現在サポートされているキータイプは, *rsa.PublicKey, *ecdsa.PublicKey,および ed25519.PublicKey です。 サポートされていないキータイプはエラーになります。
この種類のキーは,一般に "PUBLIC KEY" タイプの PEM ブロックにエンコードされます。
func ParseCRL(crlBytes []byte) (*pkix.CertificateList, error)
ParseCRL は与えられたバイトから CRL をパースします。 多くの場合, PEM でエンコードされた CRL は DER でエンコードされるべき場所に表示されます。 そのため,この関数は,先行するゴミがない限り,透過的に PEM エンコードを処理します。
func ParseDERCRL(derBytes []byte) (*pkix.CertificateList, error)
ParseDERCRL は与えられたバイトから DER エンコードされた CRL をパースします。
func ParseECPrivateKey(der []byte) (*ecdsa.PrivateKey, error)
ParseECPrivateKey は, SEC 1, ASN.1 DER 形式で EC 公開鍵を解析します。
この種類のキーは,一般に "EC PUBLIC KEY" タイプの PEM ブロックにエンコードされます。
func ParsePKCS1PrivateKey(der []byte) (*rsa.PrivateKey, error)
ParsePKCS1PrivateKey は, PKCS#1, ASN.1 DER 形式で RSA 秘密鍵を解析します。
この種類のキーは,一般に "RSA PRIVATE KEY" タイプの PEM ブロックにエンコードされます。
func ParsePKCS1PublicKey(der []byte) (*rsa.PublicKey, error)
ParsePKCS1PublicKey は, PKCS#1, ASN.1 DER 形式で RSA 公開鍵を解析します。
この種類のキーは,一般に "RSA PUBLIC KEY" タイプの PEM ブロックにエンコードされます。
func ParsePKCS8PrivateKey(der []byte) (key interface{}, err error)
ParsePKCS8PrivateKey は,PKCS#8, ASN.1 DER 形式の暗号化されていない秘密鍵を解析します。
これは *rsa.PrivateKey, *ecdsa.PrivateKey, あるいは ed25519.PrivateKey を返します。 将来,さらに多くの型をサポートするかもしれません。
この種類のキーは,一般に "PRIVATE KEY" タイプの PEM ブロックにエンコードされます。
func ParsePKIXPublicKey(derBytes []byte) (pub interface{}, err error)
ParsePKIXPublicKey は, PKIX, ASN.1 DER 形式で公開鍵を解析します。
これは *rsa.PrivateKey, *ecdsa.PrivateKey, あるいは ed25519.PrivateKey を返します。 将来,さらに多くの型をサポートするかもしれません。
この種類のキーは,一般に "PUBLIC KEY" タイプの PEM ブロックにエンコードされます。
▹ 例
CertPool は証明書のセットです。
type CertPool struct {
// エクスポートされていないフィールドがあります
}
func NewCertPool() *CertPool
NewCertPool は,新しい空の CertPool を返します。
func SystemCertPool() (*CertPool, error)
SystemCertPool はシステム証明書プールのコピーを返します。
返されたプールへの変更はディスクに書き込まれず, SystemCertPool によって返された他のプールには影響しません。
システム証明書プールの新しい変更は,その後の呼び出しに反映されない可能性があります。
func (s *CertPool) AddCert(cert *Certificate)
AddCert は証明書をプールに追加します。
func (s *CertPool) AppendCertsFromPEM(pemCerts []byte) (ok bool)
AppendCertsFromPEM は,一連の PEM エンコード証明書を解析しようとします。 s に見つかった証明書を追加し,証明書が正常に解析されたかどうかを報告します。
多くの Linux システムでは, /etc/ssl/cert.pem には,この関数に適した形式でシステム全体のルート CA のセットが含まれます。
func (s *CertPool) Subjects() [][]byte
Subjects は,プール内のすべての証明書の DER エンコードされたサブジェクトのリストを返します。
Certificate (証明書) は X.509 証明書を表します。
type Certificate struct { Raw []byte // すべてを含んだ ASN.1 DER コンテンツ (証明書,署名アルゴリズム,および署名) RawTBSCertificate []byte // 生の ASN.1 DER コンテンツの証明書部分。 RawSubjectPublicKeyInfo []byte // DER エンコードされた SubjectPublicKeyInfo 。 RawSubject []byte // DER エンコード件名 RawIssuer []byte // DER エンコード発行者 Signature []byte SignatureAlgorithm SignatureAlgorithm PublicKeyAlgorithm PublicKeyAlgorithm PublicKey interface{} Version int SerialNumber *big.Int Issuer pkix.Name Subject pkix.Name NotBefore, NotAfter time.Time // 妥当性の限界 KeyUsage KeyUsage // Extensionsは生の X.509 拡張を含みます。 // 証明書を解析するとき,これはこのパッケージによって解析されない重要ではない拡張子を抽出するために使用することができます。 // 証明書をマーシャリングするとき, " 拡張機能 " フィールドは無視されます。 // ExtraExtensions を参照してください。 Extensions []pkix.Extension // Go 1.2 // ExtraExtensions には,マーシャリングされた証明書にそのままコピーされる拡張子が含まれています。 // 値は,それ以外の場合は他のフィールドに基づいて生成されるはずの拡張子をすべてオーバーライドします。 // 証明書を解析するときに [ExtraExtensions] フィールドは設定されません。 // "Extensions" を参照してください。 ExtraExtensions []pkix.Extension // Go 1.2 // UnhandledCriticalExtensions には,解析時に (完全に) 処理されなかった拡張子 ID のリストが含まれています。 // 検証がすべての重要な拡張を理解する OS ライブラリに委任されていない限り,このスライスが空でない場合,検証は失敗します。 // // ユーザーは拡張機能を使用してこれらの拡張機能にアクセスでき,それらが処理されたと思われる場合はこのスライスから要素を削除できます。 UnhandledCriticalExtensions []asn1.ObjectIdentifier // Go 1.5 ExtKeyUsage []ExtKeyUsage // 拡張キー使用法のシーケンス UnknownExtKeyUsage []asn1.ObjectIdentifier // このパッケージには知られていない拡張された主要な用法に遭遇しました。 // BasicConstraintsValid は, IsCA, MaxPathLen ,および MaxPathLenZero が有効かどうかを示します。 BasicConstraintsValid bool IsCA bool // MaxPathLen と MaxPathLenZero は, BasicConstraints の "pathLenConstraint" の存在と値を示します。 // // 証明書を解析するとき,ゼロ以外の正の MaxPathLen はフィールドが指定されたことを意味し, -1 はそれが設定解除されたことを意味し, // MaxPathLenZero が true の場合,フィールドは明示的にゼロに設定されます。 // MaxPathLenZero==false で MaxPathLen==0 の場合は, -1 (未設定) と同等に扱われる必要があります。 // // 証明書を生成するときは, MaxPathLen == -1 を使用するか, MaxPathLen と MaxPathLenZero の両方にゼロ値を使用して,設定されていないpathLenConstraint をリクエストできます。 MaxPathLen int // MaxPathLenZero は, BasicConstraintsValid==true および MaxPathLen==0 が実際の最大パス長ゼロとして解釈されるべきであることを示します。 // それ以外の場合,その組み合わせは MaxPathLen が設定されていないと解釈されます。 MaxPathLenZero bool // Go 1.4 SubjectKeyId []byte AuthorityKeyId []byte // RFC 5280, 4.2.2.1 (権限情報アクセス) OCSPServer []string // Go 1.2 IssuingCertificateURL []string // Go 1.2 // サブジェクト代替名の値。 // (解析された証明書に無効な値が含まれている場合,これらの値は無効になることがあります。 // たとえば, DNSNames の要素は有効な DNS ドメイン名ではない可能性があります。) DNSNames []string EmailAddresses []string IPAddresses []net.IP // Go 1.1 URIs []*url.URL // Go 1.10 // 名前の制約 PermittedDNSDomainsCritical bool // true の場合,名前制約は重要とマークされています。 PermittedDNSDomains []string ExcludedDNSDomains []string // Go 1.9 PermittedIPRanges []*net.IPNet // Go 1.10 ExcludedIPRanges []*net.IPNet // Go 1.10 PermittedEmailAddresses []string // Go 1.10 ExcludedEmailAddresses []string // Go 1.10 PermittedURIDomains []string // Go 1.10 ExcludedURIDomains []string // Go 1.10 // CRL 配布ポイント CRLDistributionPoints []string // Go 1.2 PolicyIdentifiers []asn1.ObjectIdentifier }
func ParseCertificate(asn1Data []byte) (*Certificate, error)
ParseCertificate は与えられた ASN.1 DER データから 1 つの証明書を解析します。
func ParseCertificates(asn1Data []byte) ([]*Certificate, error)
ParseCertificates は,与えられた ASN.1 DER データから 1 つ以上の証明書を解析します。 証明書は中間パディングなしで連結する必要があります。
func (c *Certificate) CheckCRLSignature(crl *pkix.CertificateList) error
CheckCRLSignature は, crl 内の署名が c からの署名であることを確認します。
func (c *Certificate) CheckSignature(algo SignatureAlgorithm, signed, signature []byte) error
CheckSignature は,その署名が c の公開鍵から署名された有効な署名であることを確認します。
func (c *Certificate) CheckSignatureFrom(parent *Certificate) error
CheckSignatureFrom は, c の署名が親からの有効な署名であることを確認します。
func (c *Certificate) CreateCRL(rand io.Reader, priv interface{}, revokedCerts []pkix.RevokedCertificate, now, expiry time.Time) (crlBytes []byte, err error)
CreateCRL は,この証明書によって署名された DER エンコード CRL を返します。 これには,指定された失効した証明書のリストが含まれています。
func (c *Certificate) Equal(other *Certificate) bool
func (c *Certificate) Verify(opts VerifyOptions) (chains [][]*Certificate, err error)
Verify は必要に応じて opts.Intermediates 内の証明書を使用して, c から opts.Roots 内の証明書までの 1 つ以上のチェーンを構築して, c の検証を試みます。 成功すると,チェーンの最初の要素が c で最後の要素が opts.Roots からの 1 つ以上のチェーンを返します。
opts.Roots が nil でシステムルートが利用できない場合,返されるエラーは SystemRootsError 型になります。
仲介者の名前制約は, opts.DNSName だけでなく,チェーンで主張されているすべての名前に適用されます。 したがって,たとえ example.com が検証されている名前でなくても,中間体がそれを許可しない場合,リーフが example.com を請求することは無効です。 DirectoryName 制約はサポートされていないことに注意してください。
拡張キー使用法の値は連鎖的に適用されるため, EKU を列挙する中間体またはルートは,リーフがそのリストにない EKU をアサートするのを防ぎます。
警告 : この関数は失効チェックを行いません。
▹ 例
func (c *Certificate) VerifyHostname(h string) error
VerifyHostname は,c が名前付きホストの有効な証明書である場合, nil を返します。 そうでない場合は,不一致を説明するエラーを返します。
CertificateInvalidError は,奇妙なエラーが発生したときに発生します。 このライブラリのユーザはおそらくこれらすべてのエラーを一様に処理したいでしょう。
type CertificateInvalidError struct { Cert *Certificate Reason InvalidReason Detail string // Go 1.10 }
func (e CertificateInvalidError) Error() string
CertificateRequest は PKCS #10 ,証明書署名リクエストを表します。
type CertificateRequest struct { Raw []byte // 完全な ASN. 1 DER コンテンツ (CSR ,署名アルゴリズム,および署名) 。 RawTBSCertificateRequest []byte // 生の ASN.1 DER コンテンツの証明書リクエスト情報部分。 RawSubjectPublicKeyInfo []byte // DER エンコードされた SubjectPublicKeyInfo 。 RawSubject []byte // DER エンコードの件名。 Version int Signature []byte SignatureAlgorithm SignatureAlgorithm PublicKeyAlgorithm PublicKeyAlgorithm PublicKey interface{} Subject pkix.Name // Attributes (属性) には, pkix.AttributeTypeAndValueSET として解析できる CSR 属性が含まれています。 // // 非推奨: requestedExtensions 属性の解析と生成には,代わりに Extensions と ExtraExtensions を使用してください。 Attributes []pkix.AttributeTypeAndValueSET // Extensionsには,リクエストされたすべての拡張機能がそのままの形式で含まれています。 // CSR を解析するとき,これはこのパッケージによって解析されない拡張子を抽出するために使用することができます。 Extensions []pkix.Extension // ExtraExtensions には, CreateCertificateRequest によって整列化されたすべての CSR にそのままコピーする拡張機能が含まれています。 // 値は,他のフィールドに基づいて生成されるであろう拡張子をオーバーライドしますが, Attributes で指定された拡張子によってオーバーライドされます。 // // ExtraExtensions フィールドは ParseCertificateRequest によって入力されません。 // 代わりに Extensions を参照してください。 ExtraExtensions []pkix.Extension // サブジェクト代替名の値。 DNSNames []string EmailAddresses []string IPAddresses []net.IP URIs []*url.URL // Go 1.10 }
func ParseCertificateRequest(asn1Data []byte) (*CertificateRequest, error)
ParseCertificateRequest は,指定された ASN.1 DER データから 1 つの証明書リクエストを解析します。
func (c *CertificateRequest) CheckSignature() error
CheckSignature は, c の署名が有効かどうかを報告します。
ConstraintViolationErrorは,リクエストされた使用法が証明書によって許可されていない場合に発生します。 たとえば,公開鍵が証明書署名鍵ではない場合に署名を確認することなどです。
type ConstraintViolationError struct{}
func (ConstraintViolationError) Error() string
ExtKeyUsage は,特定のキーに対して有効な一連の拡張アクションを表します。 ExtKeyUsage* 定数はそれぞれ固有のアクションを定義します。
type ExtKeyUsage int
const ( ExtKeyUsageAny ExtKeyUsage = iota ExtKeyUsageServerAuth ExtKeyUsageClientAuth ExtKeyUsageCodeSigning ExtKeyUsageEmailProtection ExtKeyUsageIPSECEndSystem ExtKeyUsageIPSECTunnel ExtKeyUsageIPSECUser ExtKeyUsageTimeStamping ExtKeyUsageOCSPSigning ExtKeyUsageMicrosoftServerGatedCrypto ExtKeyUsageNetscapeServerGatedCrypto ExtKeyUsageMicrosoftCommercialCodeSigning ExtKeyUsageMicrosoftKernelCodeSigning )
HostnameError は,許可された名前のセットがリクエストされた名前と一致しない場合に発生します。
type HostnameError struct { Certificate *Certificate Host string }
func (h HostnameError) Error() string
InsecureAlgorithmError エラー
type InsecureAlgorithmError SignatureAlgorithm
func (e InsecureAlgorithmError) Error() string
type InvalidReason int
const ( // NotAuthorizedToSign は,証明書が CA 証明書としてマークされていない別の証明書によって署名されている場合に発生します。 NotAuthorizedToSign InvalidReason = iota // VerifyOptions に指定された時間に基づいて,証明書が期限切れになったときに期限切れになる結果。 Expired // CANotAuthorizedForThisName は,中間証明書またはルート証明書に,リーフ証明書でDNS または他の名前 (IP アドレスを含む) を許可しない名前制約がある場合に発生します。 CANotAuthorizedForThisName // TooManyIntermediates は,パス長の制約に違反したときに発生します。 TooManyIntermediates // IncompatibleUsage は,証明書の主な用途が,証明書が別の目的にしか使用できないことを示している場合に発生します。 IncompatibleUsage // NameMismatch は,親証明書のサブジェクト名が子の発行者名と一致しない場合に発生します。 NameMismatch // NameConstraintsWithoutSAN は,リーフ証明書にサブジェクト代替名の拡張子が含まれていないが CA 証明書に名前の制約が含まれ // 共通名はホスト名として解釈されうる場合に発生します。 // // 実験的な GODEBUG 環境変数を "x509ignoreCN=1" に設定して, Common Name のマッチングを完全に無効にすることで,このエラーを回避できます。 // この動作は将来デフォルトになるかもしれません。 NameConstraintsWithoutSANs // UnconstrainedName は, CA 証明書に許可された名前の制約が含まれているが,リーフ証明書にはサポートされていない型または制約のない型の名前が含まれている場合に発生します。 UnconstrainedName // TooManyConstraints は,証明書を確認するために必要な比較操作の数が VerifyOptions.MaxConstraintComparisions によって設定された制限を超えたときに発生します。 // この制限は,病的な証明書が検証に過度の CPU 時間を消費するのを防ぐために存在します。 TooManyConstraints // CANotAuthorizedForExtKeyUsage は,中間証明書またはルート証明書でリクエストされた拡張キーの使用が許可されていない場合に発生します。 CANotAuthorizedForExtKeyUsage )
KeyUsage は,特定のキーに有効な一連のアクションを表します。 これは KeyUsage* 定数のビットマップです。
type KeyUsage int
const ( KeyUsageDigitalSignature KeyUsage = 1 << iota KeyUsageContentCommitment KeyUsageKeyEncipherment KeyUsageDataEncipherment KeyUsageKeyAgreement KeyUsageCertSign KeyUsageCRLSign KeyUsageEncipherOnly KeyUsageDecipherOnly )
type PEMCipher int
EncryptPEMBlock 暗号化アルゴリズムに有効な値。
const ( PEMCipherDES PEMCipher PEMCipher3DES PEMCipherAES128 PEMCipherAES192 PEMCipherAES256 )
type PublicKeyAlgorithm int
const ( UnknownPublicKeyAlgorithm PublicKeyAlgorithm = iota RSA DSA ECDSA Ed25519 )
func (algo PublicKeyAlgorithm) String() string
type SignatureAlgorithm int
const ( UnknownSignatureAlgorithm SignatureAlgorithm = iota MD2WithRSA MD5WithRSA SHA1WithRSA SHA256WithRSA SHA384WithRSA SHA512WithRSA DSAWithSHA1 DSAWithSHA256 ECDSAWithSHA1 ECDSAWithSHA256 ECDSAWithSHA384 ECDSAWithSHA512 SHA256WithRSAPSS SHA384WithRSAPSS SHA512WithRSAPSS PureEd25519 )
func (algo SignatureAlgorithm) String() string
SystemRootsError は,システムルート証明書のロードに失敗したときに発生します。
type SystemRootsError struct { Err error // Go 1.7 }
func (se SystemRootsError) Error() string
type UnhandledCriticalExtension struct{}
func (h UnhandledCriticalExtension) Error() string
UnknownAuthorityError は,証明書の発行者が不明の場合に発生します。
type UnknownAuthorityError struct { Cert *Certificate // Go 1.8 // エクスポートされていないフィールドがあります }
func (e UnknownAuthorityError) Error() string
VerifyOptions には, Certificate.Verify のパラメータが含まれています。 他の PKIX 検証 API では多くのオプションが必要になったため,これは構造体です。
type VerifyOptions struct { DNSName string Intermediates *CertPool Roots *CertPool // nil の場合,システムのルートが使用されます CurrentTime time.Time // ゼロの場合,現在時刻が使用されます // KeyUsage は,どの拡張キー使用値が許容されるかを指定します。 // リストされた値のいずれかが含まれている場合,リーフ証明書は受け入れられます。 // 空のリストは ExtKeyUsageServerAuth を意味します。 // キーの使用法を受け入れるには, ExtKeyUsageAny を含めます。 // // 証明書チェーンは,これらの拡張キー使用値をネストするために必要です。 // (これは Windows CryptoAPI の動作と一致しますが,仕様とは異なります。) KeyUsages []ExtKeyUsage // Go 1.1 // MaxConstraintComparisions は,特定の証明書の名前制約を確認するときに実行する比較の最大数です。 // ゼロの場合,実用的なデフォルトが使用されます。 // この制限により,検証時に病的な証明書が過度の CPU 時間を消費するのを防ぎます。 MaxConstraintComparisions int // Go 1.10 }