亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

directory search
archive archive/tar archive/zip bufio bufio(緩存) builtin builtin(內(nèi)置包) bytes bytes(包字節(jié)) compress compress/bzip2(壓縮/bzip2) compress/flate(壓縮/flate) compress/gzip(壓縮/gzip) compress/lzw(壓縮/lzw) compress/zlib(壓縮/zlib) container container/heap(容器數(shù)據(jù)結(jié)構(gòu)heap) container/list(容器數(shù)據(jù)結(jié)構(gòu)list) container/ring(容器數(shù)據(jù)結(jié)構(gòu)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(數(shù)據(jù)庫(kù)/sql) database/sql/driver(數(shù)據(jù)庫(kù)/sql/driver) debug debug/dwarf(調(diào)試/dwarf) debug/elf(調(diào)試/elf) debug/gosym(調(diào)試/gosym) debug/macho(調(diào)試/macho) debug/pe(調(diào)試/pe) debug/plan9obj(調(diào)試/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(錯(cuò)誤) expvar expvar flag flag(命令行參數(shù)解析flag包) fmt fmt go go/ast(抽象語(yǔ)法樹(shù)) 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(調(diào)色板) image/draw(繪圖) image/gif image/jpeg image/png index index/suffixarray io io io/ioutil log log log/syslog(日志系統(tǒng)) 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(正則表達(dá)式) regexp/syntax runtime runtime(運(yùn)行時(shí)) runtime/debug(調(diào)試) runtime/internal/sys runtime/pprof runtime/race(競(jìng)爭(zhēng)) runtime/trace(執(zhí)行追蹤器) sort sort(排序算法) strconv strconv(轉(zhuǎn)換) strings strings(字符串) sync sync(同步) sync/atomic(原子操作) syscall syscall(系統(tǒng)調(diào)用) testing testing(測(cè)試) testing/iotest testing/quick text text/scanner(掃描文本) text/tabwriter text/template(定義模板) text/template/parse time time(時(shí)間戳) unicode unicode unicode/utf16 unicode/utf8 unsafe unsafe
characters

  • import "crypto/x509"

  • 概述

  • 索引

  • 示例

  • 子目錄

概述

軟件包x509 分析 X.509 編碼的密鑰和證書(shū)。

在 UNIX 系統(tǒng)上,環(huán)境變量 SSL_CERT_FILE和SSL_CERT_DIR 可分別用于覆蓋 SSL 證書(shū)文件和 SSL 證書(shū)文件目錄的系統(tǒng)默認(rèn)位置。

索引

  • 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 是嘗試執(zhí)行涉及當(dāng)前未實(shí)現(xiàn)的算法的操作的結(jié)果。

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

當(dāng)檢測(cè)到不正確的密碼時(shí),返回 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 根據(jù)模板創(chuàng)建一個(gè)新的證書(shū)。使用以下模板成員:AuthorityKeyId,BasicConstraintsValid,DNSNames,ExcludedDNSDomains,ExtKeyUsage,IsCA,KeyUsage,MaxPathLen,MaxPathLenZero,NotAfter,NotBefore,PermittedDNSDomains,PermittedDNSDomainsCritical,SerialNumber,SignatureAlgorithm,Subject,SubjectKeyId和UnknownExtKeyUsage。

該證書(shū)由 parent 簽署。如果 parent 等于模板,則證書(shū)是自簽名的。參數(shù) pub 是簽名者的公鑰,priv 是簽名者的私鑰。

返回的片是 DER 編碼中的證書(shū)。

支持通過(guò) crypto.Signer 實(shí)現(xiàn)的所有密鑰類型(包括 *rsa.PublicKey 和 *ecdsa.PublicKey。)

AuthorityKeyId 將取自父級(jí)的 SubjectKeyId(如果有),除非生成的證書(shū)是自簽名的。否則,將使用來(lái)自模板的值。

func CreateCertificateRequest

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

CreateCertificateRequest 根據(jù)模板創(chuàng)建一個(gè)新的證書(shū)請(qǐng)求。使用以下模板成員:屬性,DNS 名稱,EmailAddresses,ExtraExtensions,IPAddresses,SignatureAlgorithm 和 Subject。私鑰是簽名者的私鑰。

返回的片是 DER 編碼中的證書(shū)請(qǐng)求。

所有通過(guò) crypto.Signer 實(shí)現(xiàn)的密鑰類型都受支持(包括 *rsa.PublicKey 和 *ecdsa.PublicKey。)

func DecryptPEMBlock

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

DecryptPEMBlock 采用密碼加密的PEM塊和用于加密它的密碼并返回一段 DER 編碼字節(jié)解密。它檢查 DEK-Info 頭以確定用于解密的算法。如果不存在 DEK-Info 標(biāo)頭,則返回錯(cuò)誤。如果檢測(cè)到不正確的密碼,則返回 IncorrectPasswordError。由于加密 PEM 格式的不足,檢測(cè)不正確的密碼并不總是可能的。在這些情況下,不會(huì)返回錯(cuò)誤,但解密的 DER 字節(jié)將是隨機(jī)噪聲。

func EncryptPEMBlock

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

EncryptPEMBlock 返回一個(gè)指定類型的 PEM 塊,其中包含用給定算法和密碼加密的給定 DER 編碼數(shù)據(jù)。

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 將私鑰轉(zhuǎn)換為 ASN.1 DER 編碼形式。

func MarshalPKIXPublicKey

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

MarshalPKIXPublicKey 將公鑰序列化為 DER 編碼的 PKIX 格式。

func ParseCRL

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

ParseCRL 從給定字節(jié)分析 CRL。通常情況下,PEM 編碼的 CRL 將出現(xiàn)在 DER 編碼的位置,所以只要沒(méi)有任何前導(dǎo)垃圾,該函數(shù)就會(huì)透明地處理 PEM 編碼。

func ParseCertificates

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

ParseCertificates從給定的ASN.1 DER數(shù)據(jù)中解析一個(gè)或多個(gè)證書(shū)。證書(shū)必須連接在一起,沒(méi)有中間填充。

func ParseDERCRL

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

ParseDERCRL 從給定字節(jié)分析 DER 編碼的 CRL。

func ParseECPrivateKey

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

ParseECPrivateKey 解析 ASN.1 橢圓曲線私鑰結(jié)構(gòu)。

func ParsePKCS1PrivateKey

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

ParsePKCS1PrivateKey 從其 ASN.1 PKCS#1 DER 編碼形式返回一個(gè) RSA 私鑰。

func ParsePKCS8PrivateKey

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

ParsePKCS8PrivateKey 分析未加密的 PKCS#8 私鑰。請(qǐng)參閱 RFC 5208。

func ParsePKIXPublicKey

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

ParsePKIXPublicKey 分析 DER 編碼的公鑰。這些值通常在具有“開(kāi)始公鑰”的 PEM 塊中找到。

支持的密鑰類型包括 RSA,DSA 和 ECDSA。未知的密鑰類型會(huì)導(dǎo)致錯(cuò)誤。

成功后,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 是一組證書(shū)。

type CertPool struct {        // 包含已過(guò)濾或未導(dǎo)出的字段}

func NewCertPool

func NewCertPool() *CertPool

NewCertPool 返回一個(gè)新的空 CertPool。

func SystemCertPool

func SystemCertPool() (*CertPool, error)

SystemCertPool 返回系統(tǒng)證書(shū)池的副本。

對(duì)返回的池的任何突變都不會(huì)寫(xiě)入磁盤(pán),也不會(huì)影響任何其他池。

func (*CertPool) AddCert

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

AddCert 將證書(shū)添加到池中。

func (*CertPool) AppendCertsFromPEM

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

AppendCertsFromPEM 嘗試解析一系列 PEM 編碼的證書(shū)。它追加找到的任何證書(shū)并報(bào)告是否成功解析了任何證書(shū)。

在許多 Linux 系統(tǒng)上,/etc/ssl/cert.pem 將以適合此功能的格式包含全系列根 CA。

func (*CertPool) Subjects

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

主題將返回池中所有證書(shū)的 DER 編碼主題的列表。

type Certificate

證書(shū)代表 X.509 證書(shū)。

type Certificate struct {
        Raw                     []byte // 完整的ASN.1 DER內(nèi)容(證書(shū),簽名算法和簽名)。
        RawTBSCertificate       []byte // 原始ASN.1 DER內(nèi)容的證書(shū)部分。
        RawSubjectPublicKeyInfo []byte // DER編碼的SubjectPublicKeyInfo。 
        RawSubject              []byte // DER編碼主題
        RawIssuer               []byte // DER編碼發(fā)行者

        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        // 擴(kuò)展包含原始X.509擴(kuò)展。 解析證書(shū)時(shí),        // 這可用于提取非關(guān)鍵擴(kuò)展        // 由此包解析。 編組證書(shū)時(shí),擴(kuò)展名(Extensions)        // 字段被忽略,請(qǐng)參閱ExtraExtensions。
        Extensions []pkix.Extension        // ExtraExtensions包含要復(fù)制的原始擴(kuò)展名        // 編組證書(shū)。 值會(huì)覆蓋任何擴(kuò)展名        // 否則將根據(jù)其他字段生成。 ExtraExtensions        // 解析證書(shū)時(shí)未填充字段,請(qǐng)參閱擴(kuò)展(Extensions)。
        ExtraExtensions []pkix.Extension        // UnhandledCriticalExtensions包含一個(gè)擴(kuò)展ID列表        // 解析時(shí)沒(méi)有(完全)處理。 如果這樣,驗(yàn)證將失敗        // 除非將驗(yàn)證委托給操作系統(tǒng),否則slice不為空        // 了解所有關(guān)鍵擴(kuò)展的庫(kù)。        //        // 用戶可以使用擴(kuò)展程序訪問(wèn)這些擴(kuò)展程序,并可以刪除        // 如果他們相信他們已經(jīng)存在,那么這片中的元素        // 被處理了。
        UnhandledCriticalExtensions []asn1.ObjectIdentifier

        ExtKeyUsage        []ExtKeyUsage           // 擴(kuò)展密鑰用法的順序。
        UnknownExtKeyUsage []asn1.ObjectIdentifier // 遇到此軟件包未知的擴(kuò)展密鑰用法。        // BasicConstraintsValid表示IsCA,MaxPathLen,        // 和MaxPathLenZero有效。
        BasicConstraintsValid bool
        IsCA                  bool        // MaxPathLen和MaxPathLenZero表示存在和        // BasicConstraints的“pathLenConstraint”的值。        //        // 解析證書(shū)時(shí),正零非MaxPathLen        // 表示該字段已指定,-1表示未設(shè)置該字段,        // 和MaxPathLenZero是真的意味著該領(lǐng)域        // 明確設(shè)置為零。 MaxPathLen == 0,MaxPathLenZero == false        // 應(yīng)該被視為等于-1(未設(shè)置)。        //        // 生成證書(shū)時(shí),取消設(shè)置pathLenConstraint        // 可以使用MaxPathLen == -1或使用        // MaxPathLen和MaxPathLenZero均為零值。
        MaxPathLen int        // MaxPathLenZero表示BasicConstraintsValid == true        // 和MaxPathLen == 0應(yīng)解釋為實(shí)際        // 最大路徑長(zhǎng)度為零。 否則,那個(gè)組合就是        // 解釋為未設(shè)置MaxPathLen。
        MaxPathLenZero bool

        SubjectKeyId   []byte
        AuthorityKeyId []byte        // RFC 5280, 4.2.2.1 (權(quán)限信息訪問(wèn))
        OCSPServer            []string
        IssuingCertificateURL []string        // 主題備用名稱值
        DNSNames       []string
        EmailAddresses []string
        IPAddresses    []net.IP        //名稱限制
        PermittedDNSDomainsCritical bool // 如果為true,則名稱約束標(biāo)記為關(guān)鍵。
        PermittedDNSDomains         []string
        ExcludedDNSDomains          []string        // CRL分發(fā)點(diǎn)
        CRLDistributionPoints []string

        PolicyIdentifiers []asn1.ObjectIdentifier}

func ParseCertificate

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

ParseCertificate 從給定的 ASN.1 DER 數(shù)據(jù)中解析單個(gè)證書(shū)。

func (*Certificate) CheckCRLSignature

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

CheckCRLSignature 檢查 crl 中的簽名來(lái)自c。

func (*Certificate) CheckSignature

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

CheckSignature 驗(yàn)證簽名是從c的公鑰上簽名的有效簽名。

func (*Certificate) CheckSignatureFrom

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

CheckSignatureFrom 驗(yàn)證c上的簽名是來(lái)自父項(xiàng)的有效簽名。

func (*Certificate) CreateCRL

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

CreateCRL 返回一個(gè)由此證書(shū)簽名的 DER 編碼的 CRL,其中包含已撤銷(xiāo)證書(shū)的給定列表。

func (*Certificate) Equal

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

func (*Certificate) Verify

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

驗(yàn)證嘗試驗(yàn)證c通過(guò)構(gòu)建一個(gè)或多個(gè)鏈從c到 opts.Roots 中的證書(shū),在 opts 中使用證書(shū)。如果需要,還需要中間件。如果成功,它將返回一個(gè)或多個(gè)鏈,其中鏈的第一個(gè)元素是c,最后一個(gè)元素來(lái)自 opts.Roots。

如果 opts.Roots 為零,并且系統(tǒng)根目錄不可用,則返回的錯(cuò)誤將是 SystemRootsError 類型。

警告:這不會(huì)做任何撤銷(xiāo)檢查。

示例

package mainimport ("crypto/x509""encoding/pem")func main() {// 使用自定義根證書(shū)列表進(jìn)行驗(yàn)證。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-----`// 首先,創(chuàng)建一組根證書(shū)。 對(duì)于這個(gè)例子我們只// 有一個(gè)。 也可以省略這個(gè)以便使用// 當(dāng)前操作系統(tǒng)的默認(rèn)根集。
	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是指定主機(jī)的有效證書(shū),則 VerifyHostname 返回 nil。否則,它會(huì)返回描述不匹配的錯(cuò)誤。

type CertificateInvalidError

發(fā)生奇怪錯(cuò)誤時(shí)會(huì)導(dǎo)致 CertificateInvalidError 錯(cuò)誤。這個(gè)庫(kù)的用戶可能希望統(tǒng)一處理所有這些錯(cuò)誤。

type CertificateInvalidError struct {
        Cert   *Certificate
        Reason InvalidReason}

func (CertificateInvalidError) Error

func (e CertificateInvalidError) Error() string

type CertificateRequest

CertificateRequest 表示 PKCS#10,證書(shū)簽名請(qǐng)求。

type CertificateRequest struct {
        Raw                      []byte // 完整的ASN.1 DER內(nèi)容(CSR,簽名算法和簽名)。
        RawTBSCertificateRequest []byte // 證書(shū)請(qǐng)求信息是原始ASN.1 DER內(nèi)容的一部分。
        RawSubjectPublicKeyInfo  []byte // DER編碼的SubjectPublicKeyInfo。
        RawSubject               []byte // DER編碼主題。
        Version            int
        Signature          []byte
        SignatureAlgorithm SignatureAlgorithm

        PublicKeyAlgorithm PublicKeyAlgorithm
        PublicKey          interface{}

        Subject pkix.Name        // 屬性是bugs的干燥外殼,不應(yīng)使用。
        Attributes []pkix.AttributeTypeAndValueSET        // 擴(kuò)展包含原始X.509擴(kuò)展。 解析CSR時(shí),這個(gè)        // 可用于提取未解析的擴(kuò)展        // 包。
        Extensions []pkix.Extension        // ExtraExtensions包含要復(fù)制的原始擴(kuò)展名        // marshaled CSR。 值會(huì)覆蓋否則將覆蓋的任何擴(kuò)展        // 基于其他領(lǐng)域產(chǎn)出,但被任何領(lǐng)域覆蓋        // 在Attributes中指定的擴(kuò)展名。        //        // 解析CSR時(shí)未填充ExtraExtensions字段,請(qǐng)參閱        // Extensions。
        ExtraExtensions []pkix.Extension        // 主題備用名稱值。
        DNSNames       []string
        EmailAddresses []string
        IPAddresses    []net.IP}

func ParseCertificateRequest

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

ParseCertificateRequest 解析來(lái)自給定 ASN.1 DER 數(shù)據(jù)的單個(gè)證書(shū)請(qǐng)求。

func (*CertificateRequest) CheckSignature

func (c *CertificateRequest) CheckSignature() error

CheckSignature 報(bào)告c上的簽名是否有效。

type ConstraintViolationError

當(dāng)證書(shū)不允許請(qǐng)求的使用情況時(shí),會(huì)導(dǎo)致 ConstraintViolationError。例如:在公鑰不是證書(shū)簽名密鑰時(shí)檢查簽名。

type ConstraintViolationError struct{}

func (ConstraintViolationError) Error

func (ConstraintViolationError) Error() string

type ExtKeyUsage

ExtKeyUsage 表示對(duì)給定鍵有效的一組擴(kuò)展操作。每個(gè) ExtKeyUsage* 常量定義一個(gè)獨(dú)特的動(dòng)作。

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

type HostnameError

HostnameError 在授權(quán)名稱集與請(qǐng)求名稱不匹配時(shí)產(chǎn)生。

type HostnameError struct {
        Certificate *Certificate
        Host        string}

func (HostnameError) Error

func (h HostnameError) Error() string

type InsecureAlgorithmError

一個(gè) InsecureAlgorithmError

type InsecureAlgorithmError SignatureAlgorithm

func (InsecureAlgorithmError) Error

func (e InsecureAlgorithmError) Error() string

type InvalidReason

type InvalidReason int
const (        // 當(dāng)另一個(gè)證書(shū)簽署證書(shū)時(shí),NotAuthorizedToSign會(huì)生成結(jié)果        // 未標(biāo)記為CA證書(shū)。
        NotAuthorizedToSign InvalidReason = iota        // 證書(shū)過(guò)期時(shí)根據(jù)時(shí)間過(guò)期的結(jié)果        // 在VerifyOptions中給出。
        Expired        // 當(dāng)中間或根時(shí),結(jié)果為CANotAuthorizedForThisName        // certificate具有名稱約束,不包括名稱        // 被檢查。
        CANotAuthorizedForThisName        // 當(dāng)路徑長(zhǎng)度約束為時(shí),TooManyIntermediates結(jié)果        // 被侵犯。
        TooManyIntermediates        // 證書(shū)的密鑰用法表示不兼容的使用結(jié)果        // 它可能只用于不同的目的。
        IncompatibleUsage        // 當(dāng)父證書(shū)的主題名稱時(shí),NameMismatch結(jié)果        // 與子項(xiàng)中的頒發(fā)者名稱不匹配。
        NameMismatch)

type KeyUsage

KeyUsage 表示對(duì)給定密鑰有效的一組操作。這是一個(gè) 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

當(dāng)我們加載系統(tǒng)根證書(shū)失敗時(shí),會(huì)導(dǎo)致 SystemRootsError 錯(cuò)誤。

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 在證書(shū)頒發(fā)者未知時(shí)導(dǎo)致

type UnknownAuthorityError struct {
        Cert *Certificate        // 包含已過(guò)濾或未導(dǎo)出的字段}

func (UnknownAuthorityError) Error

func (e UnknownAuthorityError) Error() string

type VerifyOptions

VerifyOptions 包含 Certificate.Verify 的參數(shù)。這是一個(gè)結(jié)構(gòu),因?yàn)槠渌?PKIX 驗(yàn)證 API 最終需要許多選項(xiàng)。

type VerifyOptions struct {
        DNSName       string
        Intermediates *CertPool
        Roots         *CertPool // 如果為nil(零),則使用系統(tǒng)根
        CurrentTime   time.Time // 如果為零,則使用當(dāng)前時(shí)間        // KeyUsage指定可接受的擴(kuò)展密鑰用法值。        // 空列表表示ExtKeyUsageServerAuth。 密鑰用法被認(rèn)為是        // 約束反映Windows CryptoAPI行為的鏈,        // 但不是規(guī)范。 要接受任何密鑰用法,請(qǐng)包括ExtKeyUsageAny。
        KeyUsages []ExtKeyUsage}

Subdirectories

名稱

概要

pkix

pkix包包含用于ASN.1解析和序列化X.509證書(shū),CRL和OCSP的共享低級(jí)別結(jié)構(gòu)。

Previous article: Next article: