crypto/x509
x509包
import "crypto/x509"
- 概述
- 索引
- 示例
- 子目录
概述
软件包x509 分析 X.509 编码的密钥和证书。
在 UNIX 系统上,环境变量 SSL_CERT_FILE和SSL_CERT_DIR 可分别用于覆盖 SSL 证书文件和 SSL 证书文件目录的系统默认位置。
索引
- Variables
- 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 MarshalPKIXPublicKey(pub interface{}) ([]byte, error)
- func ParseCRL(crlBytes []byte) (*pkix.CertificateList, error)
- func ParseCertificates(asn1Data []byte) ([]*Certificate, error)
- func ParseDERCRL(derBytes []byte) (*pkix.CertificateList, error)
- func ParseECPrivateKey(der []byte) (*ecdsa.PrivateKey, error)
- func ParsePKCS1PrivateKey(der []byte) (*rsa.PrivateKey, 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 (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
- 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_linux.go root_unix.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 根据模板创建一个新的证书。使用以下模板成员:AuthorityKeyId,BasicConstraintsValid,DNSNames,ExcludedDNSDomains,ExtKeyUsage,IsCA,KeyUsage,MaxPathLen,MaxPathLenZero,NotAfter,NotBefore,PermittedDNSDomains,PermittedDNSDomainsCritical,SerialNumber,SignatureAlgorithm,Subject,SubjectKeyId和UnknownExtKeyUsage。
该证书由 parent 签署。如果 parent 等于模板,则证书是自签名的。参数 pub 是签名者的公钥,priv 是签名者的私钥。
返回的片是 DER 编码中的证书。
支持通过 crypto.Signer 实现的所有密钥类型(包括 *rsa.PublicKey 和 *ecdsa.PublicKey。)
AuthorityKeyId 将取自父级的 SubjectKeyId(如果有),除非生成的证书是自签名的。否则,将使用来自模板的值。
func CreateCertificateRequest(查看源代码)
func CreateCertificateRequest(rand io.Reader, template *CertificateRequest, priv interface{}) (csr []byte, err error)
CreateCertificateRequest 根据模板创建一个新的证书请求。使用以下模板成员:属性,DNS 名称,EmailAddresses,ExtraExtensions,IPAddresses,SignatureAlgorithm 和 Subject。私钥是签名者的私钥。
返回的片是 DER 编码中的证书请求。
所有通过 crypto.Signer 实现的密钥类型都受支持(包括 *rsa.PublicKey 和 *ecdsa.PublicKey。)
func DecryptPEMBlock(查看源代码)
func DecryptPEMBlock(b *pem.Block, password []byte) ([]byte, error)
DecryptPEMBlock 采用密码加密的PEM块和用于加密它的密码并返回一段 DER 编码字节解密。它检查 DEK-Info 头以确定用于解密的算法。如果不存在 DEK-Info 标头,则返回错误。如果检测到不正确的密码,则返回 IncorrectPasswordError。由于加密 PEM 格式的不足,检测不正确的密码并不总是可能的。在这些情况下,不会返回错误,但解密的 DER 字节将是随机噪声。
func EncryptPEMBlock(查看源代码)
func EncryptPEMBlock(rand io.Reader, blockType string, data, password []byte, alg PEMCipher) (*pem.Block, error)
EncryptPEMBlock 返回一个指定类型的 PEM 块,其中包含用给定算法和密码加密的给定 DER 编码数据。
func IsEncryptedPEMBlock(查看源代码)
func IsEncryptedPEMBlock(b *pem.Block) bool
如果 PEM 块被密码加密,则返回 IsEncryptedPEMBlock 。
func MarshalECPrivateKey(查看源代码)
func MarshalECPrivateKey(key *ecdsa.PrivateKey) ([]byte, error)
MarshalECPrivateKey 将 EC 私钥编组为 ASN.1 DER 格式。
func MarshalPKCS1PrivateKey(查看源代码)
func MarshalPKCS1PrivateKey(key *rsa.PrivateKey) []byte
MarshalPKCS1PrivateKey 将私钥转换为 ASN.1 DER 编码形式。
func MarshalPKIXPublicKey(查看源代码)
func MarshalPKIXPublicKey(pub interface{}) ([]byte, error)
MarshalPKIXPublicKey 将公钥序列化为 DER 编码的 PKIX 格式。
func ParseCRL(查看源代码)
func ParseCRL(crlBytes []byte) (*pkix.CertificateList, error)
ParseCRL 从给定字节分析 CRL。通常情况下,PEM 编码的 CRL 将出现在 DER 编码的位置,所以只要没有任何前导垃圾,该函数就会透明地处理 PEM 编码。
func ParseCertificates(查看源代码)
func ParseCertificates(asn1Data []byte) ([]*Certificate, error)
ParseCertificates从给定的ASN.1 DER数据中解析一个或多个证书。证书必须连接在一起,没有中间填充。
func ParseDERCRL(查看源代码)
func ParseDERCRL(derBytes []byte) (*pkix.CertificateList, error)
ParseDERCRL 从给定字节分析 DER 编码的 CRL。
func ParseECPrivateKey(查看源代码)
func ParseECPrivateKey(der []byte) (*ecdsa.PrivateKey, error)
ParseECPrivateKey 解析 ASN.1 椭圆曲线私钥结构。
func ParsePKCS1PrivateKey(查看源代码)
func ParsePKCS1PrivateKey(der []byte) (*rsa.PrivateKey, error)
ParsePKCS1PrivateKey 从其 ASN.1 PKCS#1 DER 编码形式返回一个 RSA 私钥。
func ParsePKCS8PrivateKey(查看源代码)
func ParsePKCS8PrivateKey(der []byte) (key interface{}, err error)
ParsePKCS8PrivateKey 分析未加密的 PKCS#8 私钥。请参阅 RFC 5208。
func ParsePKIXPublicKey(查看源代码)
func ParsePKIXPublicKey(derBytes []byte) (pub interface{}, err error)
ParsePKIXPublicKey 分析 DER 编码的公钥。这些值通常在具有“开始公钥”的 PEM 块中找到。
支持的密钥类型包括 RSA,DSA 和 ECDSA。未知的密钥类型会导致错误。
成功后,pub将是 *rsa.PublicKey,*dsa.PublicKey 或 *ecdsa.PublicKey 类型。
示例
package main
import (
"crypto/dsa"
"crypto/ecdsa"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"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)
default:
panic("unknown type of public key")
}
}
type CertPool(查看源代码)
CertPool 是一组证书。
type CertPool struct {
// 包含已过滤或未导出的字段
}
func NewCertPool(查看源代码)
func NewCertPool() *CertPool
NewCertPool 返回一个新的空 CertPool。
func SystemCertPool(查看源代码)
func SystemCertPool() (*CertPool, error)
SystemCertPool 返回系统证书池的副本。
对返回的池的任何突变都不会写入磁盘,也不会影响任何其他池。
func (*CertPool) AddCert(查看源代码)
func (s *CertPool) AddCert(cert *Certificate)
AddCert 将证书添加到池中。
func (*CertPool) AppendCertsFromPEM(查看源代码)
func (s *CertPool) AppendCertsFromPEM(pemCerts []byte) (ok bool)
AppendCertsFromPEM 尝试解析一系列 PEM 编码的证书。它追加找到的任何证书并报告是否成功解析了任何证书。
在许多 Linux 系统上,/etc/ssl/cert.pem 将以适合此功能的格式包含全系列根 CA。
func (*CertPool) Subjects(查看源代码)
func (s *CertPool) Subjects() [][]byte
主题将返回池中所有证书的 DER 编码主题的列表。
type 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
// 扩展包含原始X.509扩展。 解析证书时,
// 这可用于提取非关键扩展
// 由此包解析。 编组证书时,扩展名(Extensions)
// 字段被忽略,请参阅ExtraExtensions。
Extensions []pkix.Extension
// ExtraExtensions包含要复制的原始扩展名
// 编组证书。 值会覆盖任何扩展名
// 否则将根据其他字段生成。 ExtraExtensions
// 解析证书时未填充字段,请参阅扩展(Extensions)。
ExtraExtensions []pkix.Extension
// UnhandledCriticalExtensions包含一个扩展ID列表
// 解析时没有(完全)处理。 如果这样,验证将失败
// 除非将验证委托给操作系统,否则slice不为空
// 了解所有关键扩展的库。
//
// 用户可以使用扩展程序访问这些扩展程序,并可以删除
// 如果他们相信他们已经存在,那么这片中的元素
// 被处理了。
UnhandledCriticalExtensions []asn1.ObjectIdentifier
ExtKeyUsage []ExtKeyUsage // 扩展密钥用法的顺序。
UnknownExtKeyUsage []asn1.ObjectIdentifier // 遇到此软件包未知的扩展密钥用法。
// BasicConstraintsValid表示IsCA,MaxPathLen,
// 和MaxPathLenZero有效。
BasicConstraintsValid bool
IsCA bool
// MaxPathLen和MaxPathLenZero表示存在和
// BasicConstraints的“pathLenConstraint”的值。
//
// 解析证书时,正零非MaxPathLen
// 表示该字段已指定,-1表示未设置该字段,
// 和MaxPathLenZero是真的意味着该领域
// 明确设置为零。 MaxPathLen == 0,MaxPathLenZero == false
// 应该被视为等于-1(未设置)。
//
// 生成证书时,取消设置pathLenConstraint
// 可以使用MaxPathLen == -1或使用
// MaxPathLen和MaxPathLenZero均为零值。
MaxPathLen int
// MaxPathLenZero表示BasicConstraintsValid == true
// 和MaxPathLen == 0应解释为实际
// 最大路径长度为零。 否则,那个组合就是
// 解释为未设置MaxPathLen。
MaxPathLenZero bool
SubjectKeyId []byte
AuthorityKeyId []byte
// RFC 5280, 4.2.2.1 (权限信息访问)
OCSPServer []string
IssuingCertificateURL []string
// 主题备用名称值
DNSNames []string
EmailAddresses []string
IPAddresses []net.IP
//名称限制
PermittedDNSDomainsCritical bool // 如果为true,则名称约束标记为关键。
PermittedDNSDomains []string
ExcludedDNSDomains []string
// CRL分发点
CRLDistributionPoints []string
PolicyIdentifiers []asn1.ObjectIdentifier
}
func ParseCertificate(查看源代码)
func ParseCertificate(asn1Data []byte) (*Certificate, error)
ParseCertificate 从给定的 ASN.1 DER 数据中解析单个证书。
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)
验证尝试验证c通过构建一个或多个链从c到 opts.Roots 中的证书,在 opts 中使用证书。如果需要,还需要中间件。如果成功,它将返回一个或多个链,其中链的第一个元素是c,最后一个元素来自 opts.Roots。
如果 opts.Roots 为零,并且系统根目录不可用,则返回的错误将是 SystemRootsError 类型。
警告:这不会做任何撤销检查。
示例
package main
import (
"crypto/x509"
"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-----`
// 首先,创建一组根证书。 对于这个例子我们只
// 有一个。 也可以省略这个以便使用
// 当前操作系统的默认根集。
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
如果c是指定主机的有效证书,则 VerifyHostname 返回 nil。否则,它会返回描述不匹配的错误。
type CertificateInvalidError(查看源代码)
发生奇怪错误时会导致 CertificateInvalidError 错误。这个库的用户可能希望统一处理所有这些错误。
type CertificateInvalidError struct {
Cert *Certificate
Reason InvalidReason
}
func (CertificateInvalidError) Error(查看源代码)
func (e CertificateInvalidError) Error() string
type CertificateRequest(查看源代码)
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
// 属性是bugs的干燥外壳,不应使用。
Attributes []pkix.AttributeTypeAndValueSET
// 扩展包含原始X.509扩展。 解析CSR时,这个
// 可用于提取未解析的扩展
// 包。
Extensions []pkix.Extension
// ExtraExtensions包含要复制的原始扩展名
// marshaled CSR。 值会覆盖否则将覆盖的任何扩展
// 基于其他领域产出,但被任何领域覆盖
// 在Attributes中指定的扩展名。
//
// 解析CSR时未填充ExtraExtensions字段,请参阅
// Extensions。
ExtraExtensions []pkix.Extension
// 主题备用名称值。
DNSNames []string
EmailAddresses []string
IPAddresses []net.IP
}
func ParseCertificateRequest(查看源代码)
func ParseCertificateRequest(asn1Data []byte) (*CertificateRequest, error)
ParseCertificateRequest 解析来自给定 ASN.1 DER 数据的单个证书请求。
func (*CertificateRequest) CheckSignature(查看源代码)
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
)
type HostnameError(查看源代码)
HostnameError 在授权名称集与请求名称不匹配时产生。
type HostnameError struct {
Certificate *Certificate
Host string
}
func (HostnameError) Error(查看源代码)
func (h HostnameError) Error() string
type InsecureAlgorithmError(查看源代码)
一个 InsecureAlgorithmError
type InsecureAlgorithmError SignatureAlgorithm
func (InsecureAlgorithmError) Error(查看源代码)
func (e InsecureAlgorithmError) Error() string
type InvalidReason(查看源代码)
type InvalidReason int
const (
// 当另一个证书签署证书时,NotAuthorizedToSign会生成结果
// 未标记为CA证书。
NotAuthorizedToSign InvalidReason = iota
// 证书过期时根据时间过期的结果
// 在VerifyOptions中给出。
Expired
// 当中间或根时,结果为CANotAuthorizedForThisName
// certificate具有名称约束,不包括名称
// 被检查。
CANotAuthorizedForThisName
// 当路径长度约束为时,TooManyIntermediates结果
// 被侵犯。
TooManyIntermediates
// 证书的密钥用法表示不兼容的使用结果
// 它可能只用于不同的目的。
IncompatibleUsage
// 当父证书的主题名称时,NameMismatch结果
// 与子项中的颁发者名称不匹配。
NameMismatch
)
type KeyUsage(查看源代码)
KeyUsage 表示对给定密钥有效的一组操作。这是一个 KeyUsage* 常量的位图。
type KeyUsage int
const (
KeyUsageDigitalSignature KeyUsage = 1 << iota
KeyUsageContentCommitment
KeyUsageKeyEncipherment
KeyUsageDataEncipherment
KeyUsageKeyAgreement
KeyUsageCertSign
KeyUsageCRLSign
KeyUsageEncipherOnly
KeyUsageDecipherOnly
)
type PEMCipher(查看源代码)
type PEMCipher int
EncryptPEMBlock 加密算法的可能值。
const (
PEMCipherDES PEMCipher
PEMCipher3DES
PEMCipherAES128
PEMCipherAES192
PEMCipherAES256
)
type PublicKeyAlgorithm(查看源代码)
type PublicKeyAlgorithm int
const (
UnknownPublicKeyAlgorithm PublicKeyAlgorithm = iota
RSA
DSA
ECDSA
)
type SignatureAlgorithm(查看源代码)
type SignatureAlgorithm int
const (
UnknownSignatureAlgorithm SignatureAlgorithm = iota
MD2WithRSA
MD5WithRSA
SHA1WithRSA
SHA256WithRSA
SHA384WithRSA
SHA512WithRSA
DSAWithSHA1
DSAWithSHA256
ECDSAWithSHA1
ECDSAWithSHA256
ECDSAWithSHA384
ECDSAWithSHA512
SHA256WithRSAPSS
SHA384WithRSAPSS
SHA512WithRSAPSS
)
func (SignatureAlgorithm) String(查看源代码)
func (algo SignatureAlgorithm) String() string
type SystemRootsError(查看源代码)
当我们加载系统根证书失败时,会导致 SystemRootsError 错误。
type SystemRootsError struct {
Err error
}
func (SystemRootsError) Error(查看源代码)
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
// 包含已过滤或未导出的字段
}
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。 密钥用法被认为是
// 约束反映Windows CryptoAPI行为的链,
// 但不是规范。 要接受任何密钥用法,请包括ExtKeyUsageAny。
KeyUsages []ExtKeyUsage
}
Subdirectories
名称 | 概要 |
---|---|
pkix | pkix包包含用于ASN.1解析和序列化X.509证书,CRL和OCSP的共享低级别结构。 |