...

パッケージ x509

import "crypto/x509"
概要
目次
サブディレクトリ

概要 ▾

x509 パッケージは,X.509 でエンコードされた鍵と証明書をパースします。

UNIX システムでは,環境変数 SSL_CERT_FILE および SSL_CERT_DIR を使用して,それぞれ SSL 証明書ファイルおよび SSL 証明書ファイルディレクトリのシステムデフォルト位置を上書きできます。

目次 ▾

変数
func CreateCertificate(rand io.Reader, template, parent *Certificate, pub, priv interface{}) (cert []byte, err error)
func CreateCertificateRequest(rand io.Reader, template *CertificateRequest, priv interface{}) (csr []byte, err error)
func DecryptPEMBlock(b *pem.Block, password []byte) ([]byte, error)
func EncryptPEMBlock(rand io.Reader, blockType string, data, password []byte, alg PEMCipher) (*pem.Block, error)
func IsEncryptedPEMBlock(b *pem.Block) bool
func MarshalECPrivateKey(key *ecdsa.PrivateKey) ([]byte, error)
func MarshalPKCS1PrivateKey(key *rsa.PrivateKey) []byte
func MarshalPKCS1PublicKey(key *rsa.PublicKey) []byte
func MarshalPKCS8PrivateKey(key interface{}) ([]byte, error)
func MarshalPKIXPublicKey(pub interface{}) ([]byte, error)
func ParseCRL(crlBytes []byte) (*pkix.CertificateList, error)
func ParseDERCRL(derBytes []byte) (*pkix.CertificateList, error)
func ParseECPrivateKey(der []byte) (*ecdsa.PrivateKey, error)
func ParsePKCS1PrivateKey(der []byte) (*rsa.PrivateKey, error)
func ParsePKCS1PublicKey(der []byte) (*rsa.PublicKey, error)
func ParsePKCS8PrivateKey(der []byte) (key interface{}, err error)
func ParsePKIXPublicKey(derBytes []byte) (pub interface{}, err error)
type CertPool
    func NewCertPool() *CertPool
    func SystemCertPool() (*CertPool, error)
    func (s *CertPool) AddCert(cert *Certificate)
    func (s *CertPool) AppendCertsFromPEM(pemCerts []byte) (ok bool)
    func (s *CertPool) Subjects() [][]byte
type Certificate
    func ParseCertificate(asn1Data []byte) (*Certificate, error)
    func ParseCertificates(asn1Data []byte) ([]*Certificate, error)
    func (c *Certificate) CheckCRLSignature(crl *pkix.CertificateList) error
    func (c *Certificate) CheckSignature(algo SignatureAlgorithm, signed, signature []byte) error
    func (c *Certificate) CheckSignatureFrom(parent *Certificate) error
    func (c *Certificate) CreateCRL(rand io.Reader, priv interface{}, revokedCerts []pkix.RevokedCertificate, now, expiry time.Time) (crlBytes []byte, err error)
    func (c *Certificate) Equal(other *Certificate) bool
    func (c *Certificate) Verify(opts VerifyOptions) (chains [][]*Certificate, err error)
    func (c *Certificate) VerifyHostname(h string) error
type CertificateInvalidError
    func (e CertificateInvalidError) Error() string
type CertificateRequest
    func ParseCertificateRequest(asn1Data []byte) (*CertificateRequest, error)
    func (c *CertificateRequest) CheckSignature() error
type ConstraintViolationError
    func (ConstraintViolationError) Error() string
type ExtKeyUsage
type HostnameError
    func (h HostnameError) Error() string
type InsecureAlgorithmError
    func (e InsecureAlgorithmError) Error() string
type InvalidReason
type KeyUsage
type PEMCipher
type PublicKeyAlgorithm
    func (algo PublicKeyAlgorithm) String() string
type SignatureAlgorithm
    func (algo SignatureAlgorithm) String() string
type SystemRootsError
    func (se SystemRootsError) Error() string
type UnhandledCriticalExtension
    func (h UnhandledCriticalExtension) Error() string
type UnknownAuthorityError
    func (e UnknownAuthorityError) Error() string
type VerifyOptions

Certificate.Verify
ParsePKIXPublicKey

パッケージファイル

cert_pool.go pem_decrypt.go pkcs1.go pkcs8.go root.go root_cgo_darwin.go root_darwin.go sec1.go verify.go x509.go

変数

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

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

不正なパスワードが検出されると, IncorrectPasswordError が返されます。

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

func CreateCertificate

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 エンコーディングの証明書です。

The currently supported key types are *rsa.PublicKey, *ecdsa.PublicKey and ed25519.PublicKey. pub must be a supported key type, and priv must be a crypto.Signer with a supported public key.

結果の証明書が自己署名されていない限り, AuthorityKeyId は,もしあれば parent の SubjectKeyId から取得されます。 それ以外の場合は, template の値が使用されます。

func CreateCertificateRequest 1.3

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

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

- SignatureAlgorithm
- Subject
- DNSNames
- EmailAddresses
- IPAddresses
- URIs
- ExtraExtensions
- Attributes (deprecated)

priv is the private key to sign the CSR with, and the corresponding public key will be included in the CSR. It must implement crypto.Signer and its Public() method must return a *rsa.PublicKey or a *ecdsa.PublicKey or a ed25519.PublicKey. (A *rsa.PrivateKey, *ecdsa.PrivateKey or ed25519.PrivateKey satisfies this.)

返されたスライスは, DER エンコーディングの証明書リクエストです。

func DecryptPEMBlock 1.1

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

DecryptPEMBlock は,パスワードで暗号化された PEM ブロックとそれを暗号化するために使用されたパスワードを受け取り,復号化された DER でエンコードされたバイトスライスを返します。 復号化に使用されるアルゴリズムを決定するために DEK-Info ヘッダーを調べます。 DEK-Info ヘッダが存在しない場合,エラーが返されます。 誤ったパスワードが検出された場合, IncorrectPasswordError が返されます。 暗号化された PEM 形式には欠陥のために,誤ったパスワードを検出できるとは限りません。 このような場合,エラーは返されませんが,復号化された DER バイトはランダムノイズになります。

func EncryptPEMBlock 1.1

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

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

func IsEncryptedPEMBlock 1.1

func IsEncryptedPEMBlock(b *pem.Block) bool

IsEncryptedPEMBlock は,PEM ブロックがパスワードで暗号化されているかを報告します。

func MarshalECPrivateKey 1.2

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

MarshalECPrivateKey converts an EC private key to SEC 1, ASN.1 DER form.

This kind of key is commonly encoded in PEM blocks of type "EC PRIVATE KEY". For a more flexible key format which is not EC specific, use MarshalPKCS8PrivateKey.

func MarshalPKCS1PrivateKey

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

MarshalPKCS1PrivateKey converts an RSA private key to PKCS#1, ASN.1 DER form.

This kind of key is commonly encoded in PEM blocks of type "RSA PRIVATE KEY". For a more flexible key format which is not RSA specific, use MarshalPKCS8PrivateKey.

func MarshalPKCS1PublicKey 1.10

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

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

This kind of key is commonly encoded in PEM blocks of type "RSA PUBLIC KEY".

func MarshalPKCS8PrivateKey 1.10

func MarshalPKCS8PrivateKey(key interface{}) ([]byte, error)

MarshalPKCS8PrivateKey converts an RSA private key to PKCS#8, ASN.1 DER form.

The following key types are currently supported: *rsa.PrivateKey, *ecdsa.PrivateKey and ed25519.PrivateKey. Unsupported key types result in an error.

This kind of key is commonly encoded in PEM blocks of type "PRIVATE KEY".

func MarshalPKIXPublicKey

func MarshalPKIXPublicKey(pub interface{}) ([]byte, error)

MarshalPKIXPublicKey converts a public key to PKIX, ASN.1 DER form.

The following key types are currently supported: *rsa.PublicKey, *ecdsa.PublicKey and ed25519.PublicKey. Unsupported key types result in an error.

This kind of key is commonly encoded in PEM blocks of type "PUBLIC KEY".

func ParseCRL

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

ParseCRL は与えられたバイトから CRL をパースします。 多くの場合, PEM でエンコードされた CRL は DER でエンコードされるべき場所に表示されます。 そのため,この関数は,先行するゴミがない限り,透過的に PEM エンコードを処理します。

func ParseDERCRL

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

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

func ParseECPrivateKey 1.1

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

ParseECPrivateKey parses an EC public key in SEC 1, ASN.1 DER form.

This kind of key is commonly encoded in PEM blocks of type "EC PUBLIC KEY".

func ParsePKCS1PrivateKey

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

ParsePKCS1PrivateKey parses an RSA private key in PKCS#1, ASN.1 DER form.

This kind of key is commonly encoded in PEM blocks of type "RSA PRIVATE KEY".

func ParsePKCS1PublicKey 1.10

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

ParsePKCS1PublicKey parses an RSA public key in PKCS#1, ASN.1 DER form.

This kind of key is commonly encoded in PEM blocks of type "RSA PUBLIC KEY".

func ParsePKCS8PrivateKey

func ParsePKCS8PrivateKey(der []byte) (key interface{}, err error)

ParsePKCS8PrivateKey parses an unencrypted private key in PKCS#8, ASN.1 DER form.

It returns a *rsa.PrivateKey, a *ecdsa.PrivateKey, or a ed25519.PrivateKey. More types might be supported in the future.

This kind of key is commonly encoded in PEM blocks of type "PRIVATE KEY".

func ParsePKIXPublicKey

func ParsePKIXPublicKey(derBytes []byte) (pub interface{}, err error)

ParsePKIXPublicKey parses a public key in PKIX, ASN.1 DER form.

It returns a *rsa.PublicKey, *dsa.PublicKey, *ecdsa.PublicKey, or ed25519.PublicKey. More types might be supported in the future.

This kind of key is commonly encoded in PEM blocks of type "PUBLIC KEY".

コード:

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")
}

type CertPool

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

type CertPool struct {
    // エクスポートされていないフィールドがあります
}

func NewCertPool

func NewCertPool() *CertPool

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

func SystemCertPool 1.7

func SystemCertPool() (*CertPool, error)

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

返されたプールへの変更はディスクに書き込まれず, 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) Subjects

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

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

type Certificate

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

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

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

func ParseCertificates

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

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

func (*Certificate) CheckCRLSignature

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

CheckCRLSignature は, crl 内の署名が c からの署名であることを確認します。

func (*Certificate) CheckSignature

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

CheckSignature は,その署名が c の公開鍵から署名された有効な署名であることを確認します。

func (*Certificate) CheckSignatureFrom

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

CheckSignatureFrom は, c の署名が親からの有効な署名であることを確認します。

func (*Certificate) CreateCRL

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

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

func (*Certificate) Equal

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

func (*Certificate) Verify

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 をアサートするのを防ぎます。

警告 : この関数は失効チェックを行いません。

コード:

// ルート証明書のカスタムリストを使って検証します。

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())
}

func (*Certificate) VerifyHostname

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

VerifyHostname は,c が名前付きホストの有効な証明書である場合, nil を返します。 そうでない場合は,不一致を説明するエラーを返します。

type CertificateInvalidError

CertificateInvalidError は,奇妙なエラーが発生したときに発生します。 このライブラリのユーザはおそらくこれらすべてのエラーを一様に処理したいでしょう。

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

func (CertificateInvalidError) Error

func (e CertificateInvalidError) Error() string

type CertificateRequest 1.3

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 属性が含まれています。
    //
    // Deprecated: Use Extensions and ExtraExtensions instead for parsing and
    // generating the requestedExtensions attribute.
    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 1.3

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

ParseCertificateRequest は,指定された ASN.1 DER データから 1 つの証明書リクエストを解析します。

func (*CertificateRequest) CheckSignature 1.5

func (c *CertificateRequest) CheckSignature() error

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

type ConstraintViolationError

ConstraintViolationErrorは,リクエストされた使用法が証明書によって許可されていない場合に発生します。 たとえば,公開鍵が証明書署名鍵ではない場合に署名を確認することなどです。

type ConstraintViolationError struct{}

func (ConstraintViolationError) Error

func (ConstraintViolationError) Error() string

type ExtKeyUsage

ExtKeyUsage は,特定のキーに対して有効な一連の拡張アクションを表します。 ExtKeyUsage* 定数はそれぞれ固有のアクションを定義します。

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

type HostnameError

HostnameError は,許可された名前のセットがリクエストされた名前と一致しない場合に発生します。

type HostnameError struct {
    Certificate *Certificate
    Host        string
}

func (HostnameError) Error

func (h HostnameError) Error() string

type InsecureAlgorithmError 1.6

InsecureAlgorithmError

type InsecureAlgorithmError SignatureAlgorithm

func (InsecureAlgorithmError) Error 1.6

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
    // NameConstraintsWithoutSAN は,リーフ証明書にサブジェクト代替名の拡張子が含まれていないが CA 証明書に名前の制約が含まれ
    // 共通名はホスト名として解釈されうる場合に発生します。
    //
    // 実験的な GODEBUG 環境変数を "x509ignoreCN=1" に設定して, Common Name のマッチングを完全に無効にすることで,このエラーを回避できます。
    // この動作は将来デフォルトになるかもしれません。
    NameConstraintsWithoutSANs
    // UnconstrainedName は, CA 証明書に許可された名前の制約が含まれているが,リーフ証明書にはサポートされていない型または制約のない型の名前が含まれている場合に発生します。
    UnconstrainedName
    // TooManyConstraints は,証明書を確認するために必要な比較操作の数が VerifyOptions.MaxConstraintComparisions によって設定された制限を超えたときに発生します。
    // この制限は,病的な証明書が検証に過度の CPU 時間を消費するのを防ぐために存在します。
    TooManyConstraints
    // CANotAuthorizedForExtKeyUsage は,中間証明書またはルート証明書でリクエストされた拡張キーの使用が許可されていない場合に発生します。
    CANotAuthorizedForExtKeyUsage
)

type KeyUsage

KeyUsage は,特定のキーに有効な一連のアクションを表します。 これは KeyUsage* 定数のビットマップです。

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

type PEMCipher 1.1

type PEMCipher int

EncryptPEMBlock 暗号化アルゴリズムに有効な値。

const (
    PEMCipherDES PEMCipher
    PEMCipher3DES
    PEMCipherAES128
    PEMCipherAES192
    PEMCipherAES256
)

type PublicKeyAlgorithm

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

func (PublicKeyAlgorithm) String 1.10

func (algo PublicKeyAlgorithm) String() string

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 1.6

func (algo SignatureAlgorithm) String() string

type SystemRootsError 1.1

SystemRootsError は,システムルート証明書のロードに失敗したときに発生します。

type SystemRootsError struct {
    Err error // Go 1.7
}

func (SystemRootsError) Error 1.1

func (se SystemRootsError) Error() string

type UnhandledCriticalExtension

type UnhandledCriticalExtension struct{}

func (UnhandledCriticalExtension) Error

func (h UnhandledCriticalExtension) Error() string

type UnknownAuthorityError

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

type UnknownAuthorityError struct {
    Cert *Certificate // Go 1.8
    // エクスポートされていないフィールドがあります
}

func (UnknownAuthorityError) Error

func (e UnknownAuthorityError) Error() string

type VerifyOptions

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
}

サブディレクトリ

名前 概要
..
pkix pkix パッケージは,X.509 証明書,CRL,OCSP をパースしシリアライズする ASN.1 で用いる共有された,低レベル構造を含みます。