x509

package
v1.21.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 10, 2023 License: MIT Imports: 12 Imported by: 0

Documentation

Overview

パッケージx509はX.509規格の一部を実装しています。

証明書、証明書署名要求、証明書失効リスト、エンコードされた公開および秘密鍵の解析および生成を可能にします。 チェーンビルダーを備えた証明書検証機能も提供します。

このパッケージはIETF(RFC 2459/3280/5280)によって定義されたX.509技術プロファイルを対象としており、CA/Browser Forum Baseline Requirementsによってさらに制限されています。 主な目標は、公に信頼されるTLS証明書エコシステムとそのポリシーおよび制約との互換性を提供することであり、これらのプロファイル外の機能には最小限のサポートしかありません。

macOSおよびWindowsでは、証明書の検証はシステムAPIによって処理されますが、パッケージはオペレーティングシステム間で一貫した検証ルールを適用することを目指しています。

Index

Examples

Constants

This section is empty.

Variables

View Source
var ErrUnsupportedAlgorithm = errors.New("x509: cannot verify signature: algorithm unimplemented")

ErrUnsupportedAlgorithmは、現在実装されていないアルゴリズムを使用して操作を実行しようとした結果です。

View Source
var IncorrectPasswordError = errors.New("x509: decryption password incorrect")

IncorrectPasswordError は、不正なパスワードが検出された場合に返されます。

Functions

func CreateCertificate

func CreateCertificate(rand io.Reader, template, parent *Certificate, pub, priv any) ([]byte, error)

CreateCertificateは、テンプレートに基づいて新しいX.509 v3証明書を作成します。 現在のテンプレートの以下のメンバーが使用されています:

  • AuthorityKeyId
  • BasicConstraintsValid
  • CRLDistributionPoints
  • DNSNames
  • EmailAddresses
  • ExcludedDNSDomains
  • ExcludedEmailAddresses
  • ExcludedIPRanges
  • ExcludedURIDomains
  • ExtKeyUsage
  • ExtraExtensions
  • IPAddresses
  • IsCA
  • IssuingCertificateURL
  • KeyUsage
  • MaxPathLen
  • MaxPathLenZero
  • NotAfter
  • NotBefore
  • OCSPServer
  • PermittedDNSDomains
  • PermittedDNSDomainsCritical
  • PermittedEmailAddresses
  • PermittedIPRanges
  • PermittedURIDomains
  • PolicyIdentifiers
  • SerialNumber
  • SignatureAlgorithm
  • Subject
  • SubjectKeyId
  • URIs
  • UnknownExtKeyUsage

証明書は親によって署名されます。親がテンプレートと等しい場合、証明書は自己署名です。pubパラメータは生成される証明書の公開鍵であり、privは署名者の秘密鍵です。

返されるスライスはDERエンコーディングされた証明書です。

現在サポートされている鍵のタイプは*rsa.PublicKey、*ecdsa.PublicKey、およびed25519.PublicKeyです。pubはサポートされている鍵のタイプである必要があり、privはサポートされている公開鍵を持つcrypto.Signerである必要があります。

AuthorityKeyIdは、親のSubjectKeyIdから取得されます(存在する場合)、ただし証明書が自己署名でない場合はテンプレートの値が使用されます。

テンプレートのSubjectKeyIdが空で、テンプレートがCAである場合、SubjectKeyIdは公開鍵のハッシュから生成されます。

func CreateCertificateRequest added in v1.3.0

func CreateCertificateRequest(rand io.Reader, template *CertificateRequest, priv any) (csr []byte, err error)

CreateCertificateRequestは、テンプレートを基に新しい証明書リクエストを作成します。テンプレートの以下のメンバーが使用されます:

  • SignatureAlgorithm
  • Subject
  • DNSNames
  • EmailAddresses
  • IPAddresses
  • URIs
  • ExtraExtensions
  • Attributes (非推奨)

privはCSRに署名するための秘密鍵であり、対応する公開鍵はCSRに含まれます。privはcrypto.Signerを実装しており、そのPublic()メソッドは*rsa.PublicKeyまたは*ecdsa.PublicKeyまたはed25519.PublicKeyを返さなければなりません。(*rsa.PrivateKey、*ecdsa.PrivateKey、またはed25519.PrivateKeyもこれを満たします。) 返されるスライスはDERエンコードされた証明書リクエストです。

func CreateRevocationList added in v1.15.0

func CreateRevocationList(rand io.Reader, template *RevocationList, issuer *Certificate, priv crypto.Signer) ([]byte, error)

CreateRevocationListは、テンプレートに基づいてRFC 5280に準拠した新しいX.509 v2証明書失効リストを作成します。 CRLは、privによって署名されます。これは、発行者証明書の公開キーに関連付けられた秘密キーである必要があります。 発行者はnilではなく、キーカオ必須使用方法のcrlSignビットが設定されている必要があります。 発行者の識別名CRLフィールドと権限キー識別子拡張は、発行者証明書を使用してポピュレートされます。発行者にはSubjectKeyIdが設定されている必要があります。

func DecryptPEMBlock added in v1.1.0

func DecryptPEMBlock(b *pem.Block, password []byte) ([]byte, error)

DecryptPEMBlockは、RFC 1423に従って暗号化されたPEMブロックと、それを暗号化するために使用されたパスワードを受け取り、復号化されたDER形式のバイトのスライスを返します。復号化に使用されるアルゴリズムは、DEK-Infoヘッダを調べて決定されます。DEK-Infoヘッダが存在しない場合、エラーが返されます。不正なパスワードが検出された場合、IncorrectPasswordErrorが返されます。フォーマットの不備のため、常に不正なパスワードを検出することはできません。これらの場合、エラーは返されませんが、復号化されたDERバイトはランダムなノイズになります。 廃止されました:RFC 1423で指定されたレガシーなPEM暗号化はセキュリティの設計上の問題があります。暗号文を認証しないため、パディングオラクル攻撃に対して脆弱であり、攻撃者が平文を回復することができます。

func EncryptPEMBlock added in v1.1.0

func EncryptPEMBlock(rand io.Reader, blockType string, data, password []byte, alg PEMCipher) (*pem.Block, error)

EncryptPEMBlockは、指定されたアルゴリズムとパスワードで暗号化された指定されたDERエンコードされたデータを保持する指定されたタイプのPEMブロックを返します。

廃止予定: RFC 1423で指定されているレガシーPEM暗号化は、設計上安全ではありません。暗号文を認証しないため、パディングオラクル攻撃に対して脆弱であり、攻撃者が平文を復号化できる可能性があります。

func IsEncryptedPEMBlock deprecated added in v1.1.0

func IsEncryptedPEMBlock(b *pem.Block) bool

IsEncryptedPEMBlockは、PEMブロックがRFC 1423に従ってパスワードで暗号化されているかどうかを返します。

Deprecated: RFC 1423で指定されている従来のPEM暗号化は、設計上の問題により安全ではありません。この方法では、暗号文を認証しないため、パディングオラクル攻撃に対して脆弱であり、攻撃者に平文を復元させる可能性があります。

func MarshalECPrivateKey added in v1.2.0

func MarshalECPrivateKey(key *ecdsa.PrivateKey) ([]byte, error)

MarshalECPrivateKeyは、ECの秘密鍵をSEC 1、ASN.1 DER形式に変換します。

この種類の鍵は、一般的にはタイプ"EC PRIVATE KEY"のPEMブロックにエンコードされます。 EC固有でないより柔軟な鍵形式を使用する場合は、MarshalPKCS8PrivateKeyを使用します。

func MarshalPKCS1PrivateKey

func MarshalPKCS1PrivateKey(key *rsa.PrivateKey) []byte

MarshalPKCS1PrivateKeyはRSAの秘密鍵をPKCS #1、ASN.1 DER形式に変換します。

この種類の鍵は、一般的には「RSA PRIVATE KEY」というタイプのPEMブロックにエンコードされます。 RSA固有ではなく、より柔軟な鍵形式が必要な場合は、MarshalPKCS8PrivateKeyを使用してください。

func MarshalPKCS1PublicKey added in v1.10.0

func MarshalPKCS1PublicKey(key *rsa.PublicKey) []byte

MarshalPKCS1PublicKeyはRSA公開鍵をPKCS#1のASN.1 DER形式に変換します。

この種類の鍵は一般的に、"RSA PUBLIC KEY"タイプのPEMブロックにエンコードされます。

func MarshalPKCS8PrivateKey added in v1.10.0

func MarshalPKCS8PrivateKey(key any) ([]byte, error)

MarshalPKCS8PrivateKeyは、プライベートキーをPKCS #8、ASN.1 DER形式に変換します。

現在、次のキータイプがサポートされています:*rsa.PrivateKey、*ecdsa.PrivateKey、ed25519.PrivateKey(ポインタでない)、および*ecdh.PrivateKey。 サポートされていないキータイプはエラーが発生します。

この種のキーは一般的に、"PRIVATE KEY"というタイプのPEMブロックにエンコードされます。

func MarshalPKIXPublicKey

func MarshalPKIXPublicKey(pub any) ([]byte, error)

MarshalPKIXPublicKeyは公開鍵をPKIX、ASN.1 DER形式に変換します。 エンコードされた公開鍵はSubjectPublicKeyInfo構造体です (RFC 5280、セクション4.1を参照)。

現在サポートされているキータイプは次のとおりです:*rsa.PublicKey、*ecdsa.PublicKey、ed25519.PublicKey(ポインタではありません)、*ecdh.PublicKey。 サポートされていないキータイプはエラーとなります。

この種類のキーは一般的には"type 'PUBLIC KEY'のPEMブロックでエンコードされます。

func ParseCRL

func ParseCRL(crlBytes []byte) (*pkix.CertificateList, error)

ParseCRLは指定されたバイトからCRLを解析します。PEMエンコードされたCRLがDERエンコードされるべき場所に表示されることがよくありますが、この関数は前方にゴミがない限り、PEMエンコーディングを透過的に処理します。 廃止予定: 代わりにParseRevocationListを使用してください。

func ParseDERCRL

func ParseDERCRL(derBytes []byte) (*pkix.CertificateList, error)

ParseDERCRLは与えられたバイトからDER形式でエンコードされたCRLをパースします。

非推奨: 代わりにParseRevocationListを使用してください。

func ParseECPrivateKey added in v1.1.0

func ParseECPrivateKey(der []byte) (*ecdsa.PrivateKey, error)

ParseECPrivateKeyはSEC 1、ASN.1 DER形式のECプライベートキーを解析します。

この種類のキーは、一般的に "EC PRIVATE KEY" タイプのPEMブロックにエンコードされています。

func ParsePKCS1PrivateKey

func ParsePKCS1PrivateKey(der []byte) (*rsa.PrivateKey, error)

ParsePKCS1PrivateKeyはPKCS #1形式、ASN.1 DER形式のRSA秘密鍵を解析します。

この種のキーは一般的に、"RSA PRIVATE KEY"というタイプのPEMブロックにエンコードされます。

func ParsePKCS1PublicKey added in v1.10.0

func ParsePKCS1PublicKey(der []byte) (*rsa.PublicKey, error)

ParsePKCS1PublicKeyはPKCS#1、ASN.1 DER形式のRSA公開鍵を解析します。

この種の鍵は、一般的に "RSA PUBLIC KEY"というタイプのPEMブロックでエンコードされています。

func ParsePKCS8PrivateKey

func ParsePKCS8PrivateKey(der []byte) (key any, err error)

ParsePKCS8PrivateKeyは、PKCS #8、ASN.1 DER形式の暗号化されていないプライベートキーを解析します。

これは、*rsa.PrivateKey、*ecdsa.PrivateKey、ed25519.PrivateKey (ポインタではなく)、または*ecdh.PrivateKey (X25519用)を返します。将来的にはさらに多くのタイプがサポートされる可能性があります。

この種のキーは、一般的には「PRIVATE KEY」というタイプのPEMブロックにエンコードされています。

func ParsePKIXPublicKey

func ParsePKIXPublicKey(derBytes []byte) (pub any, err error)

ParsePKIXPublicKeyはPKIX、ASN.1 DER形式の公開鍵を解析します。エンコードされた公開鍵はSubjectPublicKeyInfo構造体です(RFC 5280、セクション4.1を参照)。 *rsa.PublicKey、*dsa.PublicKey、*ecdsa.PublicKey、ed25519.PublicKey(ポインタではない)、または*ecdh.PublicKey(X25519用)を返します。 将来的にはさらに多くの種類がサポートされるかもしれません。 この種類の鍵は、一般的に「PUBLIC KEY」というタイプのPEMブロックでエンコードされます。

Example
package main

import (
	"github.com/shogo82148/std/crypto/dsa"
	"github.com/shogo82148/std/crypto/ecdsa"
	"github.com/shogo82148/std/crypto/ed25519"
	"github.com/shogo82148/std/crypto/rsa"
	"github.com/shogo82148/std/crypto/x509"
	"github.com/shogo82148/std/encoding/pem"
	"github.com/shogo82148/std/fmt"
)

func main() {
	const pubPEM = `
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlRuRnThUjU8/prwYxbty
WPT9pURI3lbsKMiB6Fn/VHOKE13p4D8xgOCADpdRagdT6n4etr9atzDKUSvpMtR3
CP5noNc97WiNCggBjVWhs7szEe8ugyqF23XwpHQ6uV1LKH50m92MbOWfCtjU9p/x
qhNpQQ1AZhqNy5Gevap5k8XzRmjSldNAFZMY7Yv3Gi+nyCwGwpVtBUwhuLzgNFK/
yDtw2WcWmUU7NuC8Q6MWvPebxVtCfVp/iQU6q60yyt6aGOBkhAX0LpKAEhKidixY
nP9PNVBvxgu3XZ4P36gZV6+ummKdBVnc3NqwBLu5+CcdRdusmHPHd5pHf4/38Z3/
6qU2a/fPvWzceVTEgZ47QjFMTCTmCwNt29cvi7zZeQzjtwQgn4ipN9NibRH/Ax/q
TbIzHfrJ1xa2RteWSdFjwtxi9C20HUkjXSeI4YlzQMH0fPX6KCE7aVePTOnB69I/
a9/q96DiXZajwlpq3wFctrs1oXqBp5DVrCIj8hU2wNgB7LtQ1mCtsYz//heai0K9
PhE4X6hiE0YmeAZjR0uHl8M/5aW9xCoJ72+12kKpWAa0SFRWLy6FejNYCYpkupVJ
yecLk/4L1W0l6jQQZnWErXZYe0PNFcmwGXy1Rep83kfBRNKRy5tvocalLlwXLdUk
AIU+2GKjyT3iMuzZxxFxPFMCAwEAAQ==
-----END PUBLIC KEY-----`

	block, _ := pem.Decode([]byte(pubPEM))
	if block == nil {
		panic("failed to parse PEM block containing the public key")
	}

	pub, err := x509.ParsePKIXPublicKey(block.Bytes)
	if err != nil {
		panic("failed to parse DER encoded public key: " + err.Error())
	}

	switch pub := pub.(type) {
	case *rsa.PublicKey:
		fmt.Println("pub is of type RSA:", pub)
	case *dsa.PublicKey:
		fmt.Println("pub is of type DSA:", pub)
	case *ecdsa.PublicKey:
		fmt.Println("pub is of type ECDSA:", pub)
	case ed25519.PublicKey:
		fmt.Println("pub is of type Ed25519:", pub)
	default:
		panic("unknown type of public key")
	}
}
Output:

func SetFallbackRoots added in v1.20.0

func SetFallbackRoots(roots *CertPool)

SetFallbackRootsは、カスタムのルートが指定されておらず、プラットフォームの検証者またはシステム証明書プールが利用できない場合(たとえばルート証明書バンドルが存在しないコンテナ内部)に、証明書の検証中に使用するルートを設定します。rootsがnilの場合、SetFallbackRootsはパニックを引き起こします。 SetFallbackRootsは1回しか呼び出すことができず、複数回呼び出した場合はパニックを引き起こします。 GODEBUG=x509usefallbackroots=1を設定することで、システム証明書プールが存在していても、すべてのプラットフォームでフォールバックの動作を強制することができます(ただし、WindowsとmacOSでは、これによりプラットフォーム検証APIの使用が無効になり、純粋なGoの検証者が使用されます)。SetFallbackRootsを呼び出さずにx509usefallbackroots=1を設定しても効果はありません。

Types

type CertPool

type CertPool struct {
	// contains filtered or unexported fields
}

CertPoolは証明書のセットです。

func NewCertPool

func NewCertPool() *CertPool

NewCertPoolは新しい、空のCertPoolを返します。

func SystemCertPool added in v1.7.0

func SystemCertPool() (*CertPool, error)

SystemCertPoolはシステム証明書プールのコピーを返します。

macOS以外のUnixシステムでは、環境変数SSL_CERT_FILEとSSL_CERT_DIRを使用して、 SSL証明書ファイルとSSL証明書ファイルのディレクトリのシステムのデフォルト場所を上書きすることができます。後者はコロンで区切られたリストになります。

返されたプールへの変更はディスクに書き込まれず、SystemCertPoolによって返される他のプールに影響を与えません。

システム証明書プールの新しい変更は、後続の呼び出しで反映されない場合があります。

func (*CertPool) AddCert

func (s *CertPool) AddCert(cert *Certificate)

AddCertは証明書をプールに追加します。

func (*CertPool) AppendCertsFromPEM

func (s *CertPool) AppendCertsFromPEM(pemCerts []byte) (ok bool)

AppendCertsFromPEMは、一連のPEMエンコードされた証明書を解析しようとします。 見つかった証明書をsに追加し、成功した証明書があるかどうかを報告します。

多くのLinuxシステムでは、/etc/ssl/cert.pemには、この関数に適した形式でシステム全体のルートCAセットが含まれています。

func (*CertPool) Clone added in v1.19.0

func (s *CertPool) Clone() *CertPool

Cloneはsのコピーを返します。

func (*CertPool) Equal added in v1.19.0

func (s *CertPool) Equal(other *CertPool) bool

Equalは、sとotherが等しいかどうかを報告します。

func (*CertPool) Subjects

func (s *CertPool) Subjects() [][]byte

Subjectsはプール内のすべての証明書のDERエンコードされたサブジェクトのリストを返します。

非推奨: sがSystemCertPoolから返された場合、Subjectsにはシステムルートは含まれません。

type Certificate

type Certificate struct {
	Raw                     []byte
	RawTBSCertificate       []byte
	RawSubjectPublicKeyInfo []byte
	RawSubject              []byte
	RawIssuer               []byte

	Signature          []byte
	SignatureAlgorithm SignatureAlgorithm

	PublicKeyAlgorithm PublicKeyAlgorithm
	PublicKey          any

	Version             int
	SerialNumber        *big.Int
	Issuer              pkix.Name
	Subject             pkix.Name
	NotBefore, NotAfter time.Time
	KeyUsage            KeyUsage

	// Extensionsには生のX.509拡張が含まれています。証明書を解析する際、
	// このフィールドを使用して、このパッケージによって解析されない非致命的な拡張を抽出できます。証明書をマーシャリングする際、Extensionsフィールドは無視されます。ExtraExtensionsを参照してください。
	Extensions []pkix.Extension

	// ExtraExtensionsには、任意のマーシャル化された証明書にコピーして使用される、拡張機能が含まれています。値は、他のフィールドに基づいて生成される拡張機能を上書きします。証明書の解析時にはExtraExtensionsフィールドは埋められませんが、Extensionsを参照してください。
	ExtraExtensions []pkix.Extension

	// UnhandledCriticalExtensionsは、解析時に(完全に)処理されなかった拡張IDのリストを含んでいます。このスライスが空でない場合、検証は失敗します。ただし、すべての重要な拡張を理解できるOSライブラリに検証が委任されている場合は除きます。
	//
	// ユーザーはExtensionsを使用してこれらの拡張にアクセスし、処理されたと信じられる要素をこのスライスから削除することができます。
	UnhandledCriticalExtensions []asn1.ObjectIdentifier

	ExtKeyUsage        []ExtKeyUsage
	UnknownExtKeyUsage []asn1.ObjectIdentifier

	// BasicConstraintsValidは、IsCA、MaxPathLen、およびMaxPathLenZeroが正常であるかどうかを示す。
	BasicConstraintsValid bool
	IsCA                  bool

	// MaxPathLen と MaxPathLenZero は BasicConstraints の "pathLenConstraint" の存在と値を指します。
	//
	// 証明書を解析する際に、正の非ゼロの MaxPathLen はフィールドが指定されたことを示し、-1 は指定されなかったことを示し、MaxPathLenZero が true の場合はフィールドが明示的にゼロに設定されたことを示します。MaxPathLen == 0 かつ MaxPathLenZero == false の場合は -1 と同等に扱われるべきです。
	//
	// 証明書を生成する際、未設定の pathLenConstraint は MaxPathLen == -1 または MaxPathLen と MaxPathLenZero の両方にゼロ値を使用することでリクエストすることができます。
	MaxPathLen int

	// MaxPathLenZeroは、BasicConstraintsValid==trueであるとき、
	// MaxPathLen==0は実際の最大パス長さが0であると解釈されることを示しています。
	// それ以外の場合、この組み合わせはMaxPathLenが設定されていないと解釈されます。
	MaxPathLenZero bool

	SubjectKeyId   []byte
	AuthorityKeyId []byte

	// RFC 5280、4.2.2.1(権限情報アクセス)
	OCSPServer            []string
	IssuingCertificateURL []string

	// Subject Alternate Nameの値。(ただし、パースされた証明書に無効な値が含まれている場合、これらの値は有効ではない場合があります。例えば、DNSNamesの要素が有効なDNSドメイン名であるとは限りません。)
	DNSNames       []string
	EmailAddresses []string
	IPAddresses    []net.IP
	URIs           []*url.URL

	// 名前の制約
	PermittedDNSDomainsCritical bool
	PermittedDNSDomains         []string
	ExcludedDNSDomains          []string
	PermittedIPRanges           []*net.IPNet
	ExcludedIPRanges            []*net.IPNet
	PermittedEmailAddresses     []string
	ExcludedEmailAddresses      []string
	PermittedURIDomains         []string
	ExcludedURIDomains          []string

	// CRL配布ポイント
	CRLDistributionPoints []string

	PolicyIdentifiers []asn1.ObjectIdentifier
}

CertificateはX.509証明書を表します。

func ParseCertificate

func ParseCertificate(der []byte) (*Certificate, error)

ParseCertificateは与えられたASN.1 DERデータから単一の証明書を解析します。

func ParseCertificates

func ParseCertificates(der []byte) ([]*Certificate, error)

ParseCertificates関数は、与えられたASN.1 DERデータから1つ以上の証明書を解析します。 証明書は、間にパディングがない形式で連結されている必要があります。

func (*Certificate) CheckCRLSignature

func (c *Certificate) CheckCRLSignature(crl *pkix.CertificateList) error

CheckCRLSignatureは、crlの署名がcからのものであることをチェックします。

廃止予定:RevocationList.CheckSignatureFromを使用してください。

func (*Certificate) CheckSignature

func (c *Certificate) CheckSignature(algo SignatureAlgorithm, signed, signature []byte) error

CheckSignatureは署名がsigned fromの公開鍵の有効な署名であることを検証します。

これは証明書に対して妥当性チェックを行わない低レベルのAPIです。

[MD5WithRSA]の署名は拒否され、[SHA1WithRSA]と[ECDSAWithSHA1]の署名は現在受け入れられています。

func (*Certificate) CheckSignatureFrom

func (c *Certificate) CheckSignatureFrom(parent *Certificate) error

CheckSignatureFromは、c上の署名が親からの有効な署名であるかを検証します。

これは非常に限定的なチェックを行う低レベルAPIであり、完全なパス検証ではありません。 ほとんどのユーザーは[Certificate.Verify]を使用するべきです。

func (*Certificate) CreateCRL

func (c *Certificate) CreateCRL(rand io.Reader, priv any, revokedCerts []pkix.RevokedCertificate, now, expiry time.Time) (crlBytes []byte, err error)

CreateCRLは、指定された失効した証明書のリストを含む、この証明書によって署名されたDERエンコードされたCRLを返します。

廃止予定: このメソッドはRFC 5280準拠のX.509 v2 CRLを生成しません。 標準に準拠したCRLを生成するためには、代わりにCreateRevocationListを使用してください。

func (*Certificate) Equal

func (c *Certificate) Equal(other *Certificate) bool

func (*Certificate) Verify

func (c *Certificate) Verify(opts VerifyOptions) (chains [][]*Certificate, err error)

Verifyは、オプションのRootsの証明書を使用して、cからaの証明書までの1つ以上のチェーンを構築し、検証を試みます。成功すると、最初のチェーン要素はcで、最後の要素はopts.Rootsから来ます。 opts.Rootsがnilの場合、プラットフォームの検証プログラムが使用される可能性があります。この場合、検証の詳細は以下の説明と異なる場合があります。システムのルートが利用できない場合、返されるエラーはSystemRootsError型です。 中間証明書の名前制約は、opts.DNSNameだけでなく、チェーン内で要求されるすべての名前に適用されます。したがって、中間証明書が許可しない場合でも、葉がexample.comを要求することは無効です。ただし、DirectoryName制約はサポートされていません。 名前制約の検証は、RFC 5280の規則に従います。ただし、DNS名の制約は、電子メールやURIで定義された先頭のピリオド形式を使用できます。制約に先頭のピリオドがある場合、有効な制約名を構成するために少なくとも1つの追加のラベルが前置される必要があります。 拡張キー使用(Extended Key Usage)の値は、チェーンが入れ子になった形で強制されます。したがって、EKUを列挙する中間証明書やルート証明書は、そのリストに含まれていないEKUを持つ葉がアサートすることを防ぎます。(これは明示されていませんが、CAが発行できる証明書の種類を制限するために一般的に行われています。) SHA1WithRSAおよびECDSAWithSHA1の署名を使用する証明書はサポートされておらず、チェーンの構築には使用されません。 返されるチェーンのc以外の証明書は変更しないでください。 警告:この関数はリボケーション(証明書の失効チェック)を行いません。

Example
package main

import (
	"github.com/shogo82148/std/crypto/x509"
	"github.com/shogo82148/std/encoding/pem"
)

func main() {
	// カスタムのルート証明書リストで検証する。

	const rootPEM = `
-----BEGIN CERTIFICATE-----
MIIEBDCCAuygAwIBAgIDAjppMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
YWwgQ0EwHhcNMTMwNDA1MTUxNTU1WhcNMTUwNDA0MTUxNTU1WjBJMQswCQYDVQQG
EwJVUzETMBEGA1UEChMKR29vZ2xlIEluYzElMCMGA1UEAxMcR29vZ2xlIEludGVy
bmV0IEF1dGhvcml0eSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
AJwqBHdc2FCROgajguDYUEi8iT/xGXAaiEZ+4I/F8YnOIe5a/mENtzJEiaB0C1NP
VaTOgmKV7utZX8bhBYASxF6UP7xbSDj0U/ck5vuR6RXEz/RTDfRK/J9U3n2+oGtv
h8DQUB8oMANA2ghzUWx//zo8pzcGjr1LEQTrfSTe5vn8MXH7lNVg8y5Kr0LSy+rE
ahqyzFPdFUuLH8gZYR/Nnag+YyuENWllhMgZxUYi+FOVvuOAShDGKuy6lyARxzmZ
EASg8GF6lSWMTlJ14rbtCMoU/M4iarNOz0YDl5cDfsCx3nuvRTPPuj5xt970JSXC
DTWJnZ37DhF5iR43xa+OcmkCAwEAAaOB+zCB+DAfBgNVHSMEGDAWgBTAephojYn7
qwVkDBF9qn1luMrMTjAdBgNVHQ4EFgQUSt0GFhu89mi1dvWBtrtiGrpagS8wEgYD
VR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwOgYDVR0fBDMwMTAvoC2g
K4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20vY3Jscy9ndGdsb2JhbC5jcmwwPQYI
KwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwOi8vZ3RnbG9iYWwtb2NzcC5n
ZW90cnVzdC5jb20wFwYDVR0gBBAwDjAMBgorBgEEAdZ5AgUBMA0GCSqGSIb3DQEB
BQUAA4IBAQA21waAESetKhSbOHezI6B1WLuxfoNCunLaHtiONgaX4PCVOzf9G0JY
/iLIa704XtE7JW4S615ndkZAkNoUyHgN7ZVm2o6Gb4ChulYylYbc3GrKBIxbf/a/
zG+FA1jDaFETzf3I93k9mTXwVqO94FntT0QJo544evZG0R0SnU++0ED8Vf4GXjza
HFa9llF7b1cq26KqltyMdMKVvvBulRP/F/A8rLIQjcxz++iPAsbw+zOzlTvjwsto
WHPbqCRiOwY1nQ2pM714A5AuTHhdUDqB1O6gyHA43LL5Z/qHQF1hwFGPa4NrzQU6
yuGnBXj8ytqU0CwIPX4WecigUCAkVDNx
-----END CERTIFICATE-----`

	const certPEM = `
-----BEGIN CERTIFICATE-----
MIIDujCCAqKgAwIBAgIIE31FZVaPXTUwDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxJTAjBgNVBAMTHEdvb2dsZSBJbnRl
cm5ldCBBdXRob3JpdHkgRzIwHhcNMTQwMTI5MTMyNzQzWhcNMTQwNTI5MDAwMDAw
WjBpMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwN
TW91bnRhaW4gVmlldzETMBEGA1UECgwKR29vZ2xlIEluYzEYMBYGA1UEAwwPbWFp
bC5nb29nbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEfRrObuSW5T7q
5CnSEqefEmtH4CCv6+5EckuriNr1CjfVvqzwfAhopXkLrq45EQm8vkmf7W96XJhC
7ZM0dYi1/qOCAU8wggFLMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAa
BgNVHREEEzARgg9tYWlsLmdvb2dsZS5jb20wCwYDVR0PBAQDAgeAMGgGCCsGAQUF
BwEBBFwwWjArBggrBgEFBQcwAoYfaHR0cDovL3BraS5nb29nbGUuY29tL0dJQUcy
LmNydDArBggrBgEFBQcwAYYfaHR0cDovL2NsaWVudHMxLmdvb2dsZS5jb20vb2Nz
cDAdBgNVHQ4EFgQUiJxtimAuTfwb+aUtBn5UYKreKvMwDAYDVR0TAQH/BAIwADAf
BgNVHSMEGDAWgBRK3QYWG7z2aLV29YG2u2IaulqBLzAXBgNVHSAEEDAOMAwGCisG
AQQB1nkCBQEwMAYDVR0fBCkwJzAloCOgIYYfaHR0cDovL3BraS5nb29nbGUuY29t
L0dJQUcyLmNybDANBgkqhkiG9w0BAQUFAAOCAQEAH6RYHxHdcGpMpFE3oxDoFnP+
gtuBCHan2yE2GRbJ2Cw8Lw0MmuKqHlf9RSeYfd3BXeKkj1qO6TVKwCh+0HdZk283
TZZyzmEOyclm3UGFYe82P/iDFt+CeQ3NpmBg+GoaVCuWAARJN/KfglbLyyYygcQq
0SgeDh8dRKUiaW3HQSoYvTvdTuqzwK4CXsr3b5/dAOY8uMuG/IAR3FgwTbZ1dtoW
RvOTa8hYiU6A475WuZKyEHcwnGYe57u2I2KbMgcKjPniocj4QzgYsVAVKW3IwaOh
yE+vPxsiUkvQHdO2fojCkY8jg70jxM+gu59tPDNbw3Uh/2Ij310FgTHsnGQMyA==
-----END CERTIFICATE-----`

	// まず、ルート証明書のセットを作成します。この例では、1つだけです。
	// 現在のオペレーティングシステムのデフォルトのルートセットを使用するために、これを省略することもできます。
	roots := x509.NewCertPool()
	ok := roots.AppendCertsFromPEM([]byte(rootPEM))
	if !ok {
		panic("failed to parse root certificate")
	}

	block, _ := pem.Decode([]byte(certPEM))
	if block == nil {
		panic("failed to parse certificate PEM")
	}
	cert, err := x509.ParseCertificate(block.Bytes)
	if err != nil {
		panic("failed to parse certificate: " + err.Error())
	}

	opts := x509.VerifyOptions{
		DNSName: "mail.google.com",
		Roots:   roots,
	}

	if _, err := cert.Verify(opts); err != nil {
		panic("failed to verify certificate: " + err.Error())
	}
}
Output:

func (*Certificate) VerifyHostname

func (c *Certificate) VerifyHostname(h string) error

VerifyHostnameは指定されたホストに対して、cが有効な証明書であればnilを返します。 それ以外の場合、ミスマッチを説明するエラーを返します。

IPアドレスはオプションで角括弧で囲まれ、IPAddressesフィールドと照合されます。 それ以外の名前は、DNSNamesフィールドで大文字小文字を区別せずにチェックされます。 名前が有効なホスト名である場合、証明書のフィールドにはワイルドカードが完全な左端のラベルとして含まれている場合があります(例: *.example.com)。

レガシーのCommon Nameフィールドは無視されることに注意してください。

type CertificateInvalidError

type CertificateInvalidError struct {
	Cert   *Certificate
	Reason InvalidReason
	Detail string
}

CertificateInvalidErrorは、奇妙なエラーが発生した場合に結果が返されます。このライブラリのユーザーはおそらく、これらのエラーを統一的に処理したいと考えるでしょう。

func (CertificateInvalidError) Error

func (e CertificateInvalidError) Error() string

type CertificateRequest added in v1.3.0

type CertificateRequest struct {
	Raw                      []byte
	RawTBSCertificateRequest []byte
	RawSubjectPublicKeyInfo  []byte
	RawSubject               []byte

	Version            int
	Signature          []byte
	SignatureAlgorithm SignatureAlgorithm

	PublicKeyAlgorithm PublicKeyAlgorithm
	PublicKey          any

	Subject pkix.Name

	// Attributesには、以下のCSR属性が含まれています。pkix.AttributeTypeAndValueSETとして解析できます。
	//
	// 廃止予定: 解析および生成には、requestedExtensions属性の代わりにExtensionsおよびExtraExtensionsを使用してください。
	Attributes []pkix.AttributeTypeAndValueSET

	// Extensionsは、すべてのリクエストされた拡張子を生の形式で保持しています。CSRを解析する際に、このパッケージで解析されない拡張子を抽出するために使用できます。
	Extensions []pkix.Extension

	// ExtraExtensionsは、任意のCSRにコピーされる拡張機能を含みます。
	// CreateCertificateRequestによってマーシャリングされます。
	// 値は他のフィールドに基づいて生成される拡張機能を上書きしますが、
	// Attributesで指定された拡張機能によっては上書きされます。
	//
	// ExtraExtensionsフィールドはParseCertificateRequestでは使用されず、
	// 代わりにExtensionsを参照してください。
	ExtraExtensions []pkix.Extension

	// Subject Alternate Nameの値。
	DNSNames       []string
	EmailAddresses []string
	IPAddresses    []net.IP
	URIs           []*url.URL
}

CertificateRequestはPKCS #10、証明書署名リクエストを表します。

func ParseCertificateRequest added in v1.3.0

func ParseCertificateRequest(asn1Data []byte) (*CertificateRequest, error)

ParseCertificateRequestは与えられたASN.1 DERデータから単一の証明書リクエストを解析します。

func (*CertificateRequest) CheckSignature added in v1.5.0

func (c *CertificateRequest) CheckSignature() error

CheckSignatureはcの署名が有効かどうかを報告します。

type ConstraintViolationError

type ConstraintViolationError struct{}

ConstraintViolationErrorは、証明書によって許可されていない要求された使用方法がある場合に発生します。例えば、公開キーが証明書署名キーではない場合に署名のチェックを行うことなどです。

func (ConstraintViolationError) Error

type ExtKeyUsage

type ExtKeyUsage int

ExtKeyUsageは、与えられたキーに対して有効な拡張アクションのセットを表します。 ExtKeyUsage*の各定数は、ユニークなアクションを定義しています。

const (
	ExtKeyUsageAny ExtKeyUsage = iota
	ExtKeyUsageServerAuth
	ExtKeyUsageClientAuth
	ExtKeyUsageCodeSigning
	ExtKeyUsageEmailProtection
	ExtKeyUsageIPSECEndSystem
	ExtKeyUsageIPSECTunnel
	ExtKeyUsageIPSECUser
	ExtKeyUsageTimeStamping
	ExtKeyUsageOCSPSigning
	ExtKeyUsageMicrosoftServerGatedCrypto
	ExtKeyUsageNetscapeServerGatedCrypto
	ExtKeyUsageMicrosoftCommercialCodeSigning
	ExtKeyUsageMicrosoftKernelCodeSigning
)

type HostnameError

type HostnameError struct {
	Certificate *Certificate
	Host        string
}

HostnameErrorは、許可された名前のセットが要求された名前と一致しない場合に発生します。

func (HostnameError) Error

func (h HostnameError) Error() string

type InsecureAlgorithmError added in v1.6.0

type InsecureAlgorithmError SignatureAlgorithm

InsecureAlgorithmErrorは、署名の生成に使用されるSignatureAlgorithmが安全でないことを示し、署名が拒否されたことを示します。

SHA-1署名のサポートを一時的に復元するには、GODEBUG環境変数に値"x509sha1=1"を含めます。ただし、このオプションは将来のリリースで削除される予定です。

func (InsecureAlgorithmError) Error added in v1.6.0

func (e InsecureAlgorithmError) Error() string

type InvalidReason

type InvalidReason int
const (

	// NotAuthorizedToSignは、他のCA証明書としてマークされていない証明書によって署名された場合に発生する結果です。
	NotAuthorizedToSign InvalidReason = iota

	// VerifyOptionsで指定された時間に基づき、証明書が期限切れとなった結果を返します。
	Expired

	// CANotAuthorizedForThisNameは、中間またはルート証明書に、葉証明書でDNSまたはその他の名前(IPアドレスを含む)を許可しない制約がある場合に発生します。
	CANotAuthorizedForThisName

	// TooManyIntermediatesは、パスの長さ制約が違反された場合に発生します。
	TooManyIntermediates

	// IncompatibleUsageは、証明書のキーの使用法が異なる目的でのみ使用できることを示す場合に発生します。
	IncompatibleUsage

	// NameMismatchは、親の証明書のサブジェクト名が子の発行者名と一致しない場合に発生します。
	NameMismatch
	// NameConstraintsWithoutSANsは、過去のエラーであり、もはや返されなくなりました。
	NameConstraintsWithoutSANs

	// UnconstrainedNameは、CA証明書に許容される名前制約が含まれているが、
	// リーフ証明書にはサポートされていないまたは制約のないタイプの名前が含まれている場合の結果です。
	UnconstrainedName

	// TooManyConstraintsは、証明書を検証するために必要な比較操作の数が、VerifyOptions.MaxConstraintComparisonsで設定された制限を超える場合に発生します。この制限は、CPU時間の過剰な消費を防ぐために存在します。
	TooManyConstraints

	// CANotAuthorizedForExtKeyUsage は、中間証明書またはルート証明書が要求された拡張キー使用法を許可しない場合に発生します。
	CANotAuthorizedForExtKeyUsage
)

type KeyUsage

type KeyUsage int

KeyUsageは、与えられたキーに対して有効なアクションのセットを表します。これはKeyUsage*の定数のビットマップです。

const (
	KeyUsageDigitalSignature KeyUsage = 1 << iota
	KeyUsageContentCommitment
	KeyUsageKeyEncipherment
	KeyUsageDataEncipherment
	KeyUsageKeyAgreement
	KeyUsageCertSign
	KeyUsageCRLSign
	KeyUsageEncipherOnly
	KeyUsageDecipherOnly
)

type PEMCipher added in v1.1.0

type PEMCipher int
const (
	PEMCipherDES PEMCipher
	PEMCipher3DES
	PEMCipherAES128
	PEMCipherAES192
	PEMCipherAES256
)

EncryptPEMBlock暗号化アルゴリズムの可能な値。

type PublicKeyAlgorithm

type PublicKeyAlgorithm int
const (
	UnknownPublicKeyAlgorithm PublicKeyAlgorithm = iota
	RSA
	DSA
	ECDSA
	Ed25519
)

func (PublicKeyAlgorithm) String added in v1.10.0

func (algo PublicKeyAlgorithm) String() string

type RevocationList added in v1.15.0

type RevocationList struct {

	// Raw はCRL(tbsCertList、signatureAlgorithm、およびsignatureValue)の完全なASN.1 DERコンテンツを含んでいます。
	Raw []byte

	// RawTBSRevocationList はASN.1 DERのtbsCertList部分のみを含みます。
	RawTBSRevocationList []byte
	// RawIssuerにはDERエンコードされた発行者が含まれています。
	RawIssuer []byte

	// Issuerには発行証明書のDNが含まれています。
	Issuer pkix.Name

	// AuthorityKeyIdは、発行証明書に関連付けられた公開鍵を識別するために使用されます。CRLを解析する際、authorityKeyIdentifier拡張から取得されます。CRLを作成する際には無視されます。拡張は発行証明書自体から取得されます。
	AuthorityKeyId []byte

	Signature []byte

	// SignatureAlgorithmは、CRLを署名する際に使用する署名アルゴリズムを決定するために使用されます。
	// もし0の場合、署名キーのデフォルトアルゴリズムが使用されます。
	SignatureAlgorithm SignatureAlgorithm

	// RevokedCertificateEntriesは、CRLのrevokedCertificatesシーケンスを表します。
	// CRLを作成するときに使用され、CRLを解析するときにも入力されます。
	// CRLを作成する際には、空またはnilである場合、revokedCertificates ASN.1シーケンスはCRLから完全に省略されます。
	RevokedCertificateEntries []RevocationListEntry

	// RevokedCertificatesはRevokedCertificateEntriesが空の場合、
	// CRL内のrevokedCertificatesシーケンスを埋めるために使用されます。
	// RevokedCertificatesは空またはnilである場合、空のCRLが作成されます。
	//
	// Deprecated: 代わりにRevokedCertificateEntriesを使用してください。
	RevokedCertificates []pkix.RevokedCertificate

	// Numberは、CRL内のX.509 v2 cRLNumber拡張を埋めるために使用されます。
	// これは特定のCRLスコープとCRL発行者に対して単調に増加するシーケンス番号である必要があります。
	// また、CRLを解析する際には、cRLNumber拡張からも値が入力されます。
	Number *big.Int

	// ThisUpdateはCRLのthisUpdateフィールドに格納されるために使用され、CRLの発行日を示します。
	ThisUpdate time.Time

	// NextUpdateはCRLのnextUpdateフィールドを埋めるために使用されます。これは次のCRLが発行される日付を示しています。NextUpdateはThisUpdateよりも大きくなければなりません。
	NextUpdate time.Time

	// Extensionsは生のX.509拡張を含んでいます。CRLを作成する際は、
	// Extensionsフィールドは無視されます。ExtraExtensionsを参照してください。
	Extensions []pkix.Extension

	// ExtraExtensionsには、CRLに直接追加する必要がある追加の拡張機能が含まれています。
	ExtraExtensions []pkix.Extension
}

RevocationList は RFC 5280 で指定されている Certificate Revocation List (CRL) を表します。

func ParseRevocationList added in v1.19.0

func ParseRevocationList(der []byte) (*RevocationList, error)

ParseRevocationListは、与えられたASN.1 DERデータからX509 v2証明書失効リストをパースします。

func (*RevocationList) CheckSignatureFrom added in v1.19.0

func (rl *RevocationList) CheckSignatureFrom(parent *Certificate) error

CheckSignatureFromは、rlの署名が発行元の有効な署名であることを確認します。

type RevocationListEntry added in v1.21.0

type RevocationListEntry struct {

	// Raw は revokedCertificates エントリの生のバイトを含んでいます。
	// CRL を解析する際に設定され、CRL を生成する際には無視されます。
	Raw []byte

	// SerialNumberは失効証明書のシリアル番号を表します。CRLを作成する際に使用され、
	// CRLを解析する際にも設定されます。nilであってはいけません。
	SerialNumber *big.Int

	// RevocationTimeは証明書の失効日時を表します。
	// CRLを作成する際に使用され、CRLを解析する際に設定されます。
	// ゼロの時間であってはなりません。
	RevocationTime time.Time

	// ReasonCodeは、RFC 5280セクション5.3.1で指定された整数の列挙値を使用して、回復の理由を表します。CRLを作成する場合、ゼロ値はreasonCode拡張機能が省略される結果になります。CRLを解析する際、ゼロ値はreasonCode拡張機能が存在しないこと(0/Unspecifiedのデフォルト回収理由を意味する)を表すか、reasonCode拡張機能が存在し、明示的に0/Unspecifiedの値を含んでいることを表す可能性があります(これはDERエンコーディングルールによらないで発生する可能性がありますが、実際に発生することがあります)。
	ReasonCode int

	// Extensionsには生のX.509拡張が含まれています。CRLエントリを解析する際、
	// このフィールドを使用して、このパッケージでパースされない非クリティカルな拡張を取得できます。
	// CRLエントリをマーシャル化する際、Extensionsフィールドは無視されます。ExtraExtensionsを参照してください。
	Extensions []pkix.Extension

	// ExtraExtensionsには、任意のマーシャルされたCRLエントリにコピーするための拡張機能が含まれています。値は、他のフィールドに基づいて生成される拡張機能を上書きします。ExtraExtensionsフィールドは、CRLエントリの解析時には値が設定されません。Extensionsを参照してください。
	ExtraExtensions []pkix.Extension
}

RevocationListEntryは、CRLのrevokedCertificatesシーケンスのエントリを表します。

type SignatureAlgorithm

type SignatureAlgorithm int
const (
	UnknownSignatureAlgorithm SignatureAlgorithm = iota

	MD2WithRSA
	MD5WithRSA
	SHA1WithRSA
	SHA256WithRSA
	SHA384WithRSA
	SHA512WithRSA
	DSAWithSHA1
	DSAWithSHA256
	ECDSAWithSHA1
	ECDSAWithSHA256
	ECDSAWithSHA384
	ECDSAWithSHA512
	SHA256WithRSAPSS
	SHA384WithRSAPSS
	SHA512WithRSAPSS
	PureEd25519
)

func (SignatureAlgorithm) String added in v1.6.0

func (algo SignatureAlgorithm) String() string

type SystemRootsError added in v1.1.0

type SystemRootsError struct {
	Err error
}

システムのルート証明書の読み込みに失敗した場合、SystemRootsErrorが発生します。

func (SystemRootsError) Error added in v1.1.0

func (se SystemRootsError) Error() string

func (SystemRootsError) Unwrap added in v1.16.0

func (se SystemRootsError) Unwrap() error

type UnhandledCriticalExtension

type UnhandledCriticalExtension struct{}

func (UnhandledCriticalExtension) Error

type UnknownAuthorityError

type UnknownAuthorityError struct {
	Cert *Certificate
	// contains filtered or unexported fields
}

UnknownAuthorityErrorは、証明書の発行者が不明な場合に発生します。

func (UnknownAuthorityError) Error

func (e UnknownAuthorityError) Error() string

type VerifyOptions

type VerifyOptions struct {

	// DNSNameが設定されている場合は、Certificate.VerifyHostnameまたはプラットフォームの検証器で葉証明書と照合されます。
	DNSName string

	// Intermediatesは、信頼アンカーではないが、リーフ証明書からルート証明書までのチェーンを形成するために使用できるオプションの証明書のプールです。
	Intermediates *CertPool

	// Rootsは、リーフ証明書がチェーンアップするために必要な信頼できるルート証明書のセットです。nilの場合、システムのルートまたはプラットフォームの検証器が使用されます。
	Roots *CertPool

	// CurrentTimeは、チェーン内のすべての証明書の有効性を確認するために使用されます。
	// ゼロの場合、現在の時刻が使用されます。
	CurrentTime time.Time

	// KeyUsagesは受け入れ可能な拡張キー利用法(Extended Key Usage)の値を指定します。リストされた値のいずれかを許可する場合、チェーンは受け入れられます。空のリストはExtKeyUsageServerAuthを意味します。どんなキー利用法でも受け入れる場合は、ExtKeyUsageAnyを含めてください。
	KeyUsages []ExtKeyUsage

	// MaxConstraintComparisionsは、指定された証明書の名前制約をチェックする際に行う比較の最大数です。
	// ゼロの場合、適切なデフォルト値が使用されます。この制限によって、病的な証明書が検証時に過剰なCPU時間を消費するのを防ぎます。
	// この制限は、プラットフォームの検証ツールには適用されません。
	MaxConstraintComparisions int
}

VerifyOptionsにはCertificate.Verifyのパラメータが含まれています。

Directories

Path Synopsis
パッケージ pkix には、ASN.1 パースおよび X.509 証明書、CRL、OCSP のシリアル化に使用される共有の低レベルの構造体が含まれています。
パッケージ pkix には、ASN.1 パースおよび X.509 証明書、CRL、OCSP のシリアル化に使用される共有の低レベルの構造体が含まれています。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL