Documentation
¶
Overview ¶
x509パッケージはX.509規格の一部を実装しています。
証明書、証明書署名要求、証明書失効リスト、エンコードされた公開および秘密鍵の解析および生成を可能にします。 チェーンビルダーを備えた証明書検証機能も提供します。
このパッケージはIETF(RFC 2459/3280/5280)によって定義されたX.509技術プロファイルを対象としており、CA/Browser Forum Baseline Requirementsによってさらに制限されています。 主な目標は、公に信頼されるTLS証明書エコシステムとそのポリシーおよび制約との互換性を提供することであり、これらのプロファイル外の機能には最小限のサポートしかありません。
macOSおよびWindowsでは、証明書の検証はシステムAPIによって処理されますが、パッケージはオペレーティングシステム間で一貫した検証ルールを適用することを目指しています。
Index ¶
- Variables
- func CreateCertificate(rand io.Reader, template, parent *Certificate, pub, priv any) ([]byte, error)
- func CreateCertificateRequest(rand io.Reader, template *CertificateRequest, priv any) (csr []byte, err error)
- func CreateRevocationList(rand io.Reader, template *RevocationList, issuer *Certificate, ...) ([]byte, error)
- func DecryptPEMBlock(b *pem.Block, password []byte) ([]byte, error)deprecated
- func EncryptPEMBlock(rand io.Reader, blockType string, data, password []byte, alg PEMCipher) (*pem.Block, error)
- func IsEncryptedPEMBlock(b *pem.Block) booldeprecated
- func MarshalECPrivateKey(key *ecdsa.PrivateKey) ([]byte, error)
- func MarshalPKCS1PrivateKey(key *rsa.PrivateKey) []byte
- func MarshalPKCS1PublicKey(key *rsa.PublicKey) []byte
- func MarshalPKCS8PrivateKey(key any) ([]byte, error)
- func MarshalPKIXPublicKey(pub any) ([]byte, error)
- func ParseCRL(crlBytes []byte) (*pkix.CertificateList, error)deprecated
- func ParseDERCRL(derBytes []byte) (*pkix.CertificateList, error)deprecated
- 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 any, err error)
- func ParsePKIXPublicKey(derBytes []byte) (pub any, err error)
- func SetFallbackRoots(roots *CertPool)
- type CertPool
- func (s *CertPool) AddCert(cert *Certificate)
- func (s *CertPool) AddCertWithConstraint(cert *Certificate, constraint func([]*Certificate) error)
- func (s *CertPool) AppendCertsFromPEM(pemCerts []byte) (ok bool)
- func (s *CertPool) Clone() *CertPool
- func (s *CertPool) Equal(other *CertPool) bool
- func (s *CertPool) Subjects() [][]bytedeprecated
- type Certificate
- func (c *Certificate) CheckCRLSignature(crl *pkix.CertificateList) errordeprecated
- 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 any, revokedCerts []pkix.RevokedCertificate, ...) (crlBytes []byte, err error)deprecated
- 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
- type CertificateRequest
- type ConstraintViolationError
- type ExtKeyUsage
- type HostnameError
- type InsecureAlgorithmError
- type InvalidReason
- type KeyUsage
- type OID
- func (o OID) AppendBinary(b []byte) ([]byte, error)
- func (o OID) AppendText(b []byte) ([]byte, error)
- func (oid OID) Equal(other OID) bool
- func (oid OID) EqualASN1OID(other asn1.ObjectIdentifier) bool
- func (o OID) MarshalBinary() ([]byte, error)
- func (o OID) MarshalText() ([]byte, error)
- func (oid OID) String() string
- func (o *OID) UnmarshalBinary(b []byte) error
- func (o *OID) UnmarshalText(text []byte) error
- type PEMCipher
- type PolicyMapping
- type PublicKeyAlgorithm
- type RevocationList
- type RevocationListEntry
- type SignatureAlgorithm
- type SystemRootsError
- type UnhandledCriticalExtension
- type UnknownAuthorityError
- type VerifyOptions
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ErrUnsupportedAlgorithm = errors.New("x509: cannot verify signature: algorithm unimplemented")
ErrUnsupportedAlgorithmは、現在実装されていないアルゴリズムを使用して操作を実行しようとした結果です。
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 (see note below)
- Policies (see note below)
- SerialNumber
- SignatureAlgorithm
- Subject
- SubjectKeyId
- URIs
- UnknownExtKeyUsage
証明書は親によって署名されます。親がテンプレートと等しい場合、証明書は自己署名です。pubパラメータは生成される証明書の公開鍵であり、privは署名者の秘密鍵です。
返されるスライスはDERエンコーディングされた証明書です。
現在サポートされているキータイプは*rsa.PublicKey、*ecdsa.PublicKey、 ed25519.PublicKeyです。pubはサポートされているキータイプである必要があり、privは サポートされている公開鍵を持つcrypto.Signerまたはcrypto.MessageSignerである必要があります。
AuthorityKeyIdは、親のSubjectKeyIdから取得されます(存在する場合)、ただし証明書が自己署名でない場合はテンプレートの値が使用されます。
テンプレートからのSubjectKeyIdが空で、テンプレートがCAである場合、SubjectKeyIdは 公開鍵のハッシュから生成されます。
template.SerialNumberがnilの場合、randからのエントロピーを使用して RFC 5280、セクション4.1.2.2に準拠したシリアル番号が生成されます。
PolicyIdentifierフィールドとPoliciesフィールドの両方を使用して証明書 ポリシーOIDをマーシャルできます。デフォルトでは、Policiesのみがマーシャルされますが、 GODEBUG設定"x509usepolicies"の値が"0"の場合、Policiesフィールドの代わりに PolicyIdentifiersフィールドがマーシャルされます。これはGo 1.24で変更されました。Policiesフィールドは 31ビットより大きなコンポーネントを持つポリシーOIDをマーシャルするために 使用できます。
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に含まれます。crypto.Signerまたはcrypto.MessageSignerを実装し、 その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によって署名されます。privは発行者証明書内の公開鍵に 関連付けられたcrypto.Signerまたはcrypto.MessageSignerである必要があります。
発行者はnilであってはならず、CRL発行者として使用するには KeyUsage でcrlSignビットを設定する必要があります。
発行者の識別名CRLフィールドと権限キー識別子拡張は、発行者証明書を使用してポピュレートされます。発行者にはSubjectKeyIdが設定されている必要があります。
func DecryptPEMBlock
deprecated
added in
v1.1.0
DecryptPEMBlockは、RFC 1423に従って暗号化されたPEMブロックと、それを暗号化するために使用されたパスワードを受け取り、復号化されたDER形式のバイトのスライスを返します。復号化に使用されるアルゴリズムは、DEK-Infoヘッダを調べて決定されます。DEK-Infoヘッダが存在しない場合、エラーが返されます。不正なパスワードが検出された場合、 IncorrectPasswordError が返されます。フォーマットの不備のため、常に不正なパスワードを検出することはできません。これらの場合、エラーは返されませんが、復号化されたDERバイトはランダムなノイズになります。
Deprecated: 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 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 を使用してください。
鍵は最初に rsa.PrivateKey.Validate を呼び出して検証を通過している必要があります。 MarshalPKCS1PrivateKeyは rsa.PrivateKey.Precompute を呼び出し、まだ事前計算されていない場合は 鍵を変更する可能性があります。
func MarshalPKCS1PublicKey ¶ added in v1.10.0
MarshalPKCS1PublicKeyは RSA 公開鍵をPKCS#1のASN.1 DER形式に変換します。
この種類の鍵は一般的に、"RSA PUBLIC KEY"タイプのPEMブロックにエンコードされます。
func MarshalPKCS8PrivateKey ¶ added in v1.10.0
MarshalPKCS8PrivateKeyは、プライベートキーをPKCS #8、ASN.1 DER形式に変換します。
現在、次のキータイプがサポートされています: *rsa.PrivateKey 、 *ecdsa.PrivateKey 、 [ed25519.PrivateKey] (ポインタでない)、および *[ecdh.PrivateKey] 。 サポートされていないキータイプはエラーが発生します。
この種の鍵は、一般的に"PRIVATE KEY"タイプのPEMブロックでエンコードされます。
MarshalPKCS8PrivateKeyはRSA鍵に対して rsa.PrivateKey.Precompute を実行します。
func MarshalPKIXPublicKey ¶
MarshalPKIXPublicKeyは公開鍵をPKIX、ASN.1 DER形式に変換します。 エンコードされた公開鍵はSubjectPublicKeyInfo構造体です (RFC 5280、セクション4.1を参照)。
現在サポートされているキータイプは次のとおりです: *rsa.PublicKey 、 *ecdsa.PublicKey 、 [ed25519.PublicKey] (ポインタではありません)、 *[ecdh.PublicKey] 。 サポートされていないキータイプはエラーとなります。
この種類のキーは一般的には"type 'PUBLIC KEY'のPEMブロックでエンコードされます。
func ParseCRL
deprecated
func ParseCRL(crlBytes []byte) (*pkix.CertificateList, error)
ParseCRLは指定されたバイトからCRLを解析します。PEMエンコードされたCRLがDERエンコードされるべき場所に表示されることがよくありますが、この関数は前方にゴミがない限り、PEMエンコーディングを透過的に処理します。
Deprecated: 代わりに ParseRevocationList を使用してください。
func ParseDERCRL
deprecated
func ParseDERCRL(derBytes []byte) (*pkix.CertificateList, error)
ParseDERCRLは与えられたバイトからDER形式でエンコードされたCRLをパースします。
Deprecated: 代わりに 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ブロックでエンコードされます。
Go 1.24以前では、CRTパラメータは無視され、再計算されていました。古い 動作を復元するには、GODEBUG=x509rsacrt=0環境変数を使用してください。
func ParsePKCS1PublicKey ¶ added in v1.10.0
ParsePKCS1PublicKeyはPKCS#1、ASN.1 DER形式の RSA 公開鍵を解析します。
この種の鍵は、一般的に "RSA PUBLIC KEY"というタイプのPEMブロックでエンコードされています。
func ParsePKCS8PrivateKey ¶
ParsePKCS8PrivateKeyは、PKCS #8、ASN.1 DER形式の暗号化されていないプライベートキーを解析します。
これは、 *rsa.PrivateKey 、 *ecdsa.PrivateKey 、 [ed25519.PrivateKey] (ポインタではなく)、または *[ecdh.PrivateKey] (X25519用)を返します。将来的にはさらに多くのタイプがサポートされる可能性があります。
この種の鍵は、一般的に"PRIVATE KEY"タイプのPEMブロックでエンコードされます。
Go 1.24以前では、RSA鍵のCRTパラメータは無視され、再計算されていました。 古い動作を復元するには、GODEBUG=x509rsacrt=0環境変数を使用してください。
func ParsePKIXPublicKey ¶
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 SystemCertPool ¶ added in v1.7.0
SystemCertPoolはシステム証明書プールのコピーを返します。
macOS以外のUnixシステムでは、環境変数SSL_CERT_FILEとSSL_CERT_DIRを使用して、 SSL証明書ファイルとSSL証明書ファイルのディレクトリのシステムのデフォルト場所を上書きすることができます。後者はコロンで区切られたリストになります。
返されたプールへの変更はディスクに書き込まれず、SystemCertPoolによって返される他のプールに影響を与えません。
システム証明書プールの新しい変更は、後続の呼び出しで反映されない場合があります。
func (*CertPool) AddCertWithConstraint ¶ added in v1.22.0
func (s *CertPool) AddCertWithConstraint(cert *Certificate, constraint func([]*Certificate) error)
AddCertWithConstraintは、追加の制約を持つ証明書をプールに追加します。 Certificate.Verifyがcertによってルート化されたチェーンを構築するとき、 さらにその全体のチェーンを制約に渡してその有効性を判断します。 制約が非nilのエラーを返すと、チェーンは破棄されます。 制約は複数のゴルーチンから同時に呼び出される可能性があります。
func (*CertPool) AppendCertsFromPEM ¶
AppendCertsFromPEMは、一連のPEMエンコードされた証明書を解析しようとします。 見つかった証明書をsに追加し、成功した証明書があるかどうかを報告します。
多くのLinuxシステムでは、/etc/ssl/cert.pemには、この関数に適した形式でシステム全体のルートCAセットが含まれています。
func (*CertPool) Subjects
deprecated
Subjectsはプール内のすべての証明書のDERエンコードされたサブジェクトのリストを返します。
Deprecated: 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 contains asn1.ObjectIdentifiers, the components
// of which are limited to int32. If a certificate contains a policy which
// cannot be represented by asn1.ObjectIdentifier, it will not be included in
// PolicyIdentifiers, but will be present in Policies, which contains all parsed
// policy OIDs.
// See CreateCertificate for context about how this field and the Policies field
// interact.
PolicyIdentifiers []asn1.ObjectIdentifier
// Policies contains all policy identifiers included in the certificate.
// See CreateCertificate for context about how this field and the PolicyIdentifiers field
// interact.
// In Go 1.22, encoding/gob cannot handle and ignores this field.
Policies []OID
// InhibitAnyPolicy and InhibitAnyPolicyZero indicate the presence and value
// of the inhibitAnyPolicy extension.
//
// The value of InhibitAnyPolicy indicates the number of additional
// certificates in the path after this certificate that may use the
// anyPolicy policy OID to indicate a match with any other policy.
//
// When parsing a certificate, a positive non-zero InhibitAnyPolicy means
// that the field was specified, -1 means it was unset, and
// InhibitAnyPolicyZero being true mean that the field was explicitly set to
// zero. The case of InhibitAnyPolicy==0 with InhibitAnyPolicyZero==false
// should be treated equivalent to -1 (unset).
InhibitAnyPolicy int
// InhibitAnyPolicyZero indicates that InhibitAnyPolicy==0 should be
// interpreted as an actual maximum path length of zero. Otherwise, that
// combination is interpreted as InhibitAnyPolicy not being set.
InhibitAnyPolicyZero bool
// InhibitPolicyMapping and InhibitPolicyMappingZero indicate the presence
// and value of the inhibitPolicyMapping field of the policyConstraints
// extension.
//
// The value of InhibitPolicyMapping indicates the number of additional
// certificates in the path after this certificate that may use policy
// mapping.
//
// When parsing a certificate, a positive non-zero InhibitPolicyMapping
// means that the field was specified, -1 means it was unset, and
// InhibitPolicyMappingZero being true mean that the field was explicitly
// set to zero. The case of InhibitPolicyMapping==0 with
// InhibitPolicyMappingZero==false should be treated equivalent to -1
// (unset).
InhibitPolicyMapping int
// InhibitPolicyMappingZero indicates that InhibitPolicyMapping==0 should be
// interpreted as an actual maximum path length of zero. Otherwise, that
// combination is interpreted as InhibitAnyPolicy not being set.
InhibitPolicyMappingZero bool
// RequireExplicitPolicy and RequireExplicitPolicyZero indicate the presence
// and value of the requireExplicitPolicy field of the policyConstraints
// extension.
//
// The value of RequireExplicitPolicy indicates the number of additional
// certificates in the path after this certificate before an explicit policy
// is required for the rest of the path. When an explicit policy is required,
// each subsequent certificate in the path must contain a required policy OID,
// or a policy OID which has been declared as equivalent through the policy
// mapping extension.
//
// When parsing a certificate, a positive non-zero RequireExplicitPolicy
// means that the field was specified, -1 means it was unset, and
// RequireExplicitPolicyZero being true mean that the field was explicitly
// set to zero. The case of RequireExplicitPolicy==0 with
// RequireExplicitPolicyZero==false should be treated equivalent to -1
// (unset).
RequireExplicitPolicy int
// RequireExplicitPolicyZero indicates that RequireExplicitPolicy==0 should be
// interpreted as an actual maximum path length of zero. Otherwise, that
// combination is interpreted as InhibitAnyPolicy not being set.
RequireExplicitPolicyZero bool
// PolicyMappings contains a list of policy mappings included in the certificate.
PolicyMappings []PolicyMapping
}
CertificateはX.509証明書を表します。
func ParseCertificate ¶
func ParseCertificate(der []byte) (*Certificate, error)
ParseCertificateは与えられたASN.1 DERデータから単一の証明書を解析します。
Go 1.23より前では、ParseCertificateは負のシリアル番号を持つ証明書を受け入れました。この挙動は、 GODEBUG環境変数に"x509negativeserial=1"を含めることで復元できます。
func ParseCertificates ¶
func ParseCertificates(der []byte) ([]*Certificate, error)
ParseCertificates関数は、与えられたASN.1 DERデータから1つ以上の証明書を解析します。 証明書は、間にパディングがない形式で連結されている必要があります。
func (*Certificate) CheckCRLSignature
deprecated
func (c *Certificate) CheckCRLSignature(crl *pkix.CertificateList) error
CheckCRLSignatureは、crlの署名がcからのものであることをチェックします。
Deprecated: 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
deprecated
func (c *Certificate) CreateCRL(rand io.Reader, priv any, revokedCerts []pkix.RevokedCertificate, now, expiry time.Time) (crlBytes []byte, err error)
CreateCRLは、指定された失効した証明書のリストを含む、この証明書によって署名されたDERエンコードされたCRLを返します。
Deprecated: このメソッドは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 ¶
func (ConstraintViolationError) Error() string
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 が 安全でなく、署名が拒否されたことを示します。
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 // NoValidChains results when there are no valid chains to return. NoValidChains )
type OID ¶ added in v1.22.0
type OID struct {
// contains filtered or unexported fields
}
OIDはASN.1 OBJECT IDENTIFIERを表します。
func OIDFromInts ¶ added in v1.22.0
OIDFromIntsは、整数を使用して新しいOIDを作成します。各整数は別々のコンポーネントです。
func (OID) AppendBinary ¶ added in v1.25.0
AppendBinaryは encoding.BinaryAppender を実装します。
func (OID) AppendText ¶ added in v1.25.0
AppendTextは encoding.TextAppender を実装します。
func (OID) EqualASN1OID ¶ added in v1.22.0
func (oid OID) EqualASN1OID(other asn1.ObjectIdentifier) bool
EqualASN1OIDは、OIDがasn1.ObjectIdentifierと等しいかどうかを返します。もし asn1.ObjectIdentifierがoidによって指定されたOIDを表現できない場合、 OIDのコンポーネントが31ビット以上必要とする場合、falseを返します。
func (OID) MarshalBinary ¶ added in v1.23.0
MarshalBinaryは encoding.BinaryMarshaler を実装します。
func (OID) MarshalText ¶ added in v1.23.0
MarshalTextは encoding.TextMarshaler を実装します。
func (*OID) UnmarshalBinary ¶ added in v1.23.0
UnmarshalBinary は encoding.BinaryUnmarshaler を実装します。
func (*OID) UnmarshalText ¶ added in v1.23.0
UnmarshalTextは encoding.TextUnmarshaler を実装します。
type PEMCipher ¶ added in v1.1.0
type PEMCipher int
const ( PEMCipherDES PEMCipher PEMCipher3DES PEMCipherAES128 PEMCipherAES192 PEMCipherAES256 )
EncryptPEMBlock暗号化アルゴリズムの可能な値。
type PolicyMapping ¶ added in v1.25.0
type PolicyMapping struct {
// IssuerDomainPolicy contains a policy OID the issuing certificate considers
// equivalent to SubjectDomainPolicy in the subject certificate.
IssuerDomainPolicy OID
// SubjectDomainPolicy contains a OID the issuing certificate considers
// equivalent to IssuerDomainPolicy in the subject certificate.
SubjectDomainPolicy OID
}
PolicyMapping represents a policy mapping entry in the policyMappings extension.
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 Certificate 失効リストをパースします。
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 Section 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 ¶
func (h UnhandledCriticalExtension) Error() string
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
// CertificatePolicies specifies which certificate policy OIDs are
// acceptable during policy validation. An empty CertificatePolices
// field implies any valid policy is acceptable.
CertificatePolicies []OID
// contains filtered or unexported fields
}
VerifyOptionsにはCertificate.Verifyのパラメータが含まれています。
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
internal
|
|
|
macos
Package macOS provides cgo-less wrappers for Core Foundation and Security.framework, similarly to how package syscall provides access to libSystem.dylib.
|
Package macOS provides cgo-less wrappers for Core Foundation and Security.framework, similarly to how package syscall provides access to libSystem.dylib. |
|
pkix パッケージには、ASN.1 パースおよび X.509 証明書、CRL、OCSP のシリアル化に使用される共有の低レベルの構造体が含まれています。
|
pkix パッケージには、ASN.1 パースおよび X.509 証明書、CRL、OCSP のシリアル化に使用される共有の低レベルの構造体が含まれています。 |