directory search
archive archive/tar archive/zip bufio bufio(缓存) builtin builtin(内置包) bytes bytes(包字节) compress compress/bzip2(压缩/bzip2) compress/flate(压缩/flate) compress/gzip(压缩/gzip) compress/lzw(压缩/lzw) compress/zlib(压缩/zlib) container container/heap(容器数据结构heap) container/list(容器数据结构list) container/ring(容器数据结构ring) context context(上下文) crypto crypto(加密) crypto/aes(加密/aes) crypto/cipher(加密/cipher) crypto/des(加密/des) crypto/dsa(加密/dsa) crypto/ecdsa(加密/ecdsa) crypto/elliptic(加密/elliptic) crypto/hmac(加密/hmac) crypto/md5(加密/md5) crypto/rand(加密/rand) crypto/rc4(加密/rc4) crypto/rsa(加密/rsa) crypto/sha1(加密/sha1) crypto/sha256(加密/sha256) crypto/sha512(加密/sha512) crypto/subtle(加密/subtle) crypto/tls(加密/tls) crypto/x509(加密/x509) crypto/x509/pkix(加密/x509/pkix) database database/sql(数据库/sql) database/sql/driver(数据库/sql/driver) debug debug/dwarf(调试/dwarf) debug/elf(调试/elf) debug/gosym(调试/gosym) debug/macho(调试/macho) debug/pe(调试/pe) debug/plan9obj(调试/plan9obj) encoding encoding(编码) encoding/ascii85(编码/ascii85) encoding/asn1(编码/asn1) encoding/base32(编码/base32) encoding/base64(编码/base64) encoding/binary(编码/binary) encoding/csv(编码/csv) encoding/gob(编码/gob) encoding/hex(编码/hex) encoding/json(编码/json) encoding/pem(编码/pem) encoding/xml(编码/xml) errors errors(错误) expvar expvar flag flag(命令行参数解析flag包) fmt fmt go go/ast(抽象语法树) go/build go/constant(常量) go/doc(文档) go/format(格式) go/importer go/parser go/printer go/scanner(扫描仪) go/token(令牌) go/types(类型) hash hash(散列) hash/adler32 hash/crc32 hash/crc64 hash/fnv html html html/template(模板) image image(图像) image/color(颜色) image/color/palette(调色板) image/draw(绘图) image/gif image/jpeg image/png index index/suffixarray io io io/ioutil log log log/syslog(日志系统) math math math/big math/big math/bits math/bits math/cmplx math/cmplx math/rand math/rand mime mime mime/multipart(多部分) mime/quotedprintable net net net/http net/http net/http/cgi net/http/cookiejar net/http/fcgi net/http/httptest net/http/httptrace net/http/httputil net/http/internal net/http/pprof net/mail net/mail net/rpc net/rpc net/rpc/jsonrpc net/smtp net/smtp net/textproto net/textproto net/url net/url os os os/exec os/signal os/user path path path/filepath(文件路径) plugin plugin(插件) reflect reflect(反射) regexp regexp(正则表达式) regexp/syntax runtime runtime(运行时) runtime/debug(调试) runtime/internal/sys runtime/pprof runtime/race(竞争) runtime/trace(执行追踪器) sort sort(排序算法) strconv strconv(转换) strings strings(字符串) sync sync(同步) sync/atomic(原子操作) syscall syscall(系统调用) testing testing(测试) testing/iotest testing/quick text text/scanner(扫描文本) text/tabwriter text/template(定义模板) text/template/parse time time(时间戳) unicode unicode unicode/utf16 unicode/utf8 unsafe unsafe
characters

  • 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 mainimport ("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 mainimport ("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的共享低级别结构。

Previous article: Next article: