Spec-Zone.ru › Go

Package x509

  • import "crypto/x509"
  • Обзор
  • Индекс
  • Примеры
  • Подкаталоги

Обзор

Пакет x509 реализует подмножество стандарта X.509.

Он позволяет парсить и генерировать сертификаты, запросы на подписание сертификатов, списки отзыва сертификатов и закодированные открытые и закрытые ключи. Он предоставляет верификатор сертификатов, включая конструктор цепочки.

Пакет ориентирован на технический профиль X.509, определенный IETF (RFC 2459/3280/5280), а также на минимальные требования форума CA/Browser. Поддержка функций за пределами этих профилей минимальна, так как основная цель пакета — обеспечение совместимости с общедоступной экосистемой сертификатов TLS и её политиками и ограничениями.

В macOS и Windows проверка сертификатов осуществляется с помощью системных API, но пакет нацелен на применение согласованных правил проверки на всех операционных системах.

Индекс

  • Переменные
  • 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, priv crypto.Signer) ([]byte, error)
  • func DecryptPEMBlock(b *pem.Block, password []byte) ([]byte, error)
  • func EncryptPEMBlock(rand io.Reader, blockType string, data, password []byte, alg PEMCipher) (*pem.Block, error)
  • func IsEncryptedPEMBlock(b *pem.Block) bool
  • func MarshalECPrivateKey(key *ecdsa.PrivateKey) ([]byte, error)
  • func MarshalPKCS1PrivateKey(key *rsa.PrivateKey) []byte
  • func MarshalPKCS1PublicKey(key *rsa.PublicKey) []byte
  • func MarshalPKCS8PrivateKey(key any) ([]byte, error)
  • func MarshalPKIXPublicKey(pub any) ([]byte, error)
  • func ParseCRL(crlBytes []byte) (*pkix.CertificateList, error)
  • func ParseDERCRL(derBytes []byte) (*pkix.CertificateList, error)
  • func ParseECPrivateKey(der []byte) (*ecdsa.PrivateKey, error)
  • func ParsePKCS1PrivateKey(der []byte) (*rsa.PrivateKey, error)
  • func ParsePKCS1PublicKey(der []byte) (*rsa.PublicKey, error)
  • func ParsePKCS8PrivateKey(der []byte) (key any, err error)
  • func ParsePKIXPublicKey(derBytes []byte) (pub any, err error)
  • func SetFallbackRoots(roots *CertPool)
  • тип CertPool
  • func NewCertPool() *CertPool
  • func SystemCertPool() (*CertPool, error)
  • 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() [][]byte
  • тип Certificate
  • func ParseCertificate(der []byte) (*Certificate, error)
  • func ParseCertificates(der []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 any, 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
  • тип CertificateInvalidError
  • func (e CertificateInvalidError) Error() string
  • тип CertificateRequest
  • func ParseCertificateRequest(asn1Data []byte) (*CertificateRequest, error)
  • func (c *CertificateRequest) CheckSignature() error
  • тип ConstraintViolationError
  • func (ConstraintViolationError) Error() string
  • тип ExtKeyUsage
  • тип HostnameError
  • func (h HostnameError) Error() string
  • тип InsecureAlgorithmError
  • func (e InsecureAlgorithmError) Error() string
  • тип InvalidReason
  • тип KeyUsage
  • тип OID
  • func OIDFromInts(oid []uint64) (OID, error)
  • func ParseOID(oid string) (OID, error)
  • 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
  • тип PEMCipher
  • тип PolicyMapping
  • тип PublicKeyAlgorithm
  • func (algo PublicKeyAlgorithm) String() string
  • тип RevocationList
  • func ParseRevocationList(der []byte) (*RevocationList, error)
  • func (rl *RevocationList) CheckSignatureFrom(parent *Certificate) error
  • тип RevocationListEntry
  • тип SignatureAlgorithm
  • func (algo SignatureAlgorithm) String() string
  • тип SystemRootsError
  • func (se SystemRootsError) Error() string
  • func (se SystemRootsError) Unwrap() error
  • тип UnhandledCriticalExtension
  • func (h UnhandledCriticalExtension) Error() string
  • тип UnknownAuthorityError
  • func (e UnknownAuthorityError) Error() string
  • тип VerifyOptions

Примеры

Certificate.Verify
ParsePKIXPublicKey

Файлы пакета

cert_pool.go oid.go parser.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 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 (см. примечание ниже)
  • Policies (см. примечание ниже)
  • SerialNumber
  • SignatureAlgorithm
  • Subject
  • SubjectKeyId
  • URIs
  • UnknownExtKeyUsage

Сертификат подписывается родительским сертификатом. Если родитель равен шаблону, сертификат является самоподписанным. Параметр pub — это открытый ключ генерируемого сертификата, а priv — закрытый ключ подписывающего субъекта.

Возвращаемый срез — это сертификат в кодировке DER.

В настоящее время поддерживаются типы ключей *rsa.PublicKey, *ecdsa.PublicKey и ed25519.PublicKey. pub должен быть поддерживаемым типом ключа, а priv должен быть crypto.Signer с поддерживаемым открытым ключом.

AuthorityKeyId будет взят из SubjectKeyId родителя, если он есть, если только создаваемый сертификат не является самоподписанным. В противном случае используется значение из шаблона.

Если SubjectKeyId из шаблона пустой, а шаблон — CA, SubjectKeyId будет сгенерирован из хэша открытого ключа.

Если template.SerialNumber равен nil, будет сгенерирован серийный номер, соответствующий RFC 5280, раздел 4.1.2.2, используя энтропию из rand.

Поля PolicyIdentifier и Policies могут использоваться для маршалинга идентификаторов политики сертификатов. По умолчанию маршалируется только поле Policies, но если значение настройки GODEBUG «x509usepolicies» равно «0», вместо поля Policies будет маршалироваться поле PolicyIdentifiers. Это изменение было внесено в Go 1.24. Поле Policies может использоваться для маршалинга идентификаторов политики, компоненты которых больше 31 бита.

func CreateCertificateRequest 1.3

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, и его метод Public() должен возвращать *rsa.PublicKey или *ecdsa.PublicKey или ed25519.PublicKey. (A *rsa.PrivateKey, *ecdsa.PrivateKey или ed25519.PrivateKey удовлетворяют этому требованию.)

Возвращаемый срез — это запрос на сертификат в кодировке DER.

func CreateRevocationList 1.15

func CreateRevocationList(rand io.Reader, template *RevocationList, issuer *Certificate, priv crypto.Signer) ([]byte, error)

CreateRevocationList создаёт новый список аннулирования сертификатов X.509 v2, согласно RFC 5280, на основе шаблона.

Список аннулирования подписывается ключом priv, который должен быть закрытым ключом, связанным с открытым ключом в сертификате издателя.

Издатель не может быть null, и бит crlSign в KeyUsage должен быть установлен, чтобы использовать его как издателя списка аннулирования.

Поле имени субъекта CRL издателя и расширение идентификатора ключа уполномоченного органа заполняются с использованием сертификата издателя. У сертификата issuer должно быть установлено поле SubjectKeyId.

func DecryptPEMBlock 1.1

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

DecryptPEMBlock принимает PEM-блок, зашифрованный в соответствии с RFC 1423, и пароль, используемый для его шифрования, и возвращает срез дешифрованных байтов в формате DER. Он проверяет заголовок DEK-Info, чтобы определить алгоритм, используемый для дешифрования. Если заголовок DEK-Info отсутствует, возвращается ошибка. Если обнаружен неверный пароль, возвращается IncorrectPasswordError. Из-за недостатков в формате не всегда можно обнаружить неверный пароль. В таких случаях ошибка не будет возвращена, но дешифрованные байты DER будут представлять собой случайный шум.

Устаревшее: Легасное шифрование PEM, как указано в RFC 1423, по своей сути небезопасно. Поскольку оно не аутентифицирует шифрованный текст, оно уязвимо к атакам с использованием уязвимостей в заполнении, которые могут позволить злоумышленнику восстановить открытый текст.

func EncryptPEMBlock 1.1

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

EncryptPEMBlock возвращает PEM-блок указанного типа, содержащий заданные данные DER, зашифрованные указанным алгоритмом и паролем в соответствии с RFC 1423.

Устаревшее: Легасное шифрование PEM, как указано в RFC 1423, по своей сути небезопасно. Поскольку оно не аутентифицирует шифрованный текст, оно уязвимо к атакам с использованием уязвимостей в заполнении, которые могут позволить злоумышленнику восстановить открытый текст.

func IsEncryptedPEMBlock 1.1

func IsEncryptedPEMBlock(b *pem.Block) bool

IsEncryptedPEMBlock возвращает значение, указывающее, является ли PEM-блок зашифрованным с паролем в соответствии с RFC 1423.

Устаревшее: Легасное шифрование PEM, как указано в RFC 1423, по своей сути небезопасно. Поскольку оно не аутентифицирует шифрованный текст, оно уязвимо к атакам с использованием уязвимостей в заполнении, которые могут позволить злоумышленнику восстановить открытый текст.

func MarshalECPrivateKey 1.2

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

MarshalECPrivateKey преобразует закрытый ключ EC в формат SEC 1, ASN.1 DER.

Этот тип ключа обычно кодируется в PEM-блоках типа «EC PRIVATE KEY». Для более гибкого формата ключа, не специфичного для EC, используйте MarshalPKCS8PrivateKey.

func MarshalPKCS1PrivateKey

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

MarshalPKCS1PrivateKey преобразует закрытый ключ RSA в формат PKCS #1, ASN.1 DER.

Этот тип ключа обычно кодируется в PEM-блоках типа «RSA PRIVATE KEY». Для более гибкого формата ключа, не специфичного для RSA, используйте MarshalPKCS8PrivateKey.

Ключ должен пройти валидацию, вызвав rsa.PrivateKey.Validate предварительно. MarshalPKCS1PrivateKey вызывает rsa.PrivateKey.Precompute, что может изменить ключ, если он не предварительно вычисленный.

func MarshalPKCS1PublicKey 1.10

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

MarshalPKCS1PublicKey преобразует открытый ключ RSA в формат PKCS #1, ASN.1 DER.

Этот тип ключа обычно кодируется в PEM-блоках типа «RSA PUBLIC KEY».

func MarshalPKCS8PrivateKey 1.10

func MarshalPKCS8PrivateKey(key any) ([]byte, error)

MarshalPKCS8PrivateKey преобразует закрытый ключ в формат PKCS #8, ASN.1 DER.

В настоящее время поддерживаются следующие типы ключей: *rsa.PrivateKey, *ecdsa.PrivateKey, ed25519.PrivateKey (не указатель), и *ecdh.PrivateKey. Неподдерживаемые типы ключей приводят к ошибке.

Этот тип ключа обычно кодируется в PEM-блоках типа «PRIVATE KEY».

MarshalPKCS8PrivateKey выполняет rsa.PrivateKey.Precompute для ключей RSA.

func MarshalPKIXPublicKey

func MarshalPKIXPublicKey(pub any) ([]byte, error)

MarshalPKIXPublicKey преобразует открытый ключ в формат PKIX, ASN.1 DER. Кодируемый открытый ключ — это структура SubjectPublicKeyInfo (см. RFC 5280, раздел 4.1).

В настоящее время поддерживаются следующие типы ключей: *rsa.PublicKey, *ecdsa.PublicKey, ed25519.PublicKey (не указатель), и *ecdh.PublicKey. Неподдерживаемые типы ключей приводят к ошибке.

Этот тип ключа обычно кодируется в PEM-блоках типа «PUBLIC KEY».

func ParseCRL

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

ParseCRL анализирует список аннулирования (CRL) из заданных байтов. Часто PEM-кодированные CRL-списки встречаются там, где ожидается DER-кодирование, поэтому эта функция прозрачно обрабатывает PEM-кодирование, если нет лишних данных в начале.

Устаревшее: Используйте ParseRevocationList вместо этого.

func ParseDERCRL

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

ParseDERCRL анализирует DER-кодированный список аннулирования (CRL) из заданных байтов.

Устаревшее: Используйте ParseRevocationList вместо этого.

func ParseECPrivateKey 1.1

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

ParseECPrivateKey анализирует закрытый ключ EC в формате SEC 1, ASN.1 DER.

Этот тип ключа обычно кодируется в PEM-блоках типа «EC PRIVATE KEY».

func ParsePKCS1PrivateKey

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

ParsePKCS1PrivateKey анализирует закрытый ключ RSA в формате PKCS #1, ASN.1 DER.

Этот тип ключа обычно кодируется в PEM-блоках типа «RSA PRIVATE KEY».

Перед Go 1.24 параметры CRT игнорировались и пересчитывались. Чтобы восстановить старое поведение, используйте переменную среды GODEBUG=x509rsacrt=0.

func ParsePKCS1PublicKey 1.10

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

ParsePKCS1PublicKey анализирует открытый ключ RSA в формате PKCS #1, ASN.1 DER.

Этот тип ключа обычно кодируется в PEM-блоках типа «RSA PUBLIC KEY».

func ParsePKCS8PrivateKey

func ParsePKCS8PrivateKey(der []byte) (key any, err error)

ParsePKCS8PrivateKey анализирует незашифрованный закрытый ключ в формате PKCS #8, ASN.1 DER.

Возвращает *rsa.PrivateKey, *ecdsa.PrivateKey, ed25519.PrivateKey (не указатель) или *ecdh.PrivateKey (для X25519). В будущем могут быть добавлены другие типы.

Этот тип ключа обычно кодируется в PEM-блоках типа «PRIVATE KEY».

Перед Go 1.24 параметры CRT ключей RSA игнорировались и пересчитывались. Чтобы восстановить старое поведение, используйте переменную среды GODEBUG=x509rsacrt=0.

func ParsePKIXPublicKey

func ParsePKIXPublicKey(derBytes []byte) (pub any, err error)

ParsePKIXPublicKey анализирует открытый ключ в формате PKIX, ASN.1 DER. Кодируемый открытый ключ — это структура SubjectPublicKeyInfo (см. RFC 5280, раздел 4.1).

Возвращает *rsa.PublicKey, *dsa.PublicKey, *ecdsa.PublicKey, ed25519.PublicKey (не указатель) или *ecdh.PublicKey (для X25519). В будущем могут быть добавлены другие типы.

Этот тип ключа обычно кодируется в PEM-блоках типа «PUBLIC KEY».

Пример

Код:

const pubPEM = `
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlRuRnThUjU8/prwYxbty
WPT9pURI3lbsKMiB6Fn/VHOKE13p4D8xgOCADpdRagdT6n4etr9atzDKUSvpMtR3
CP5noNc97WiNCggBjVWhs7szEe8ugyqF23XwpHQ6uV1LKH50m92MbOWfCtjU9p/x
qhNpQQ1AZhqNy5Gevap5k8XzRmjSldNAFZMY7Yv3Gi+nyCwGwpVtBUwhuLzgNFK/
yDtw2WcWmUU7NuC8Q6MWvPebxVtCfVp/iQU6q60yyt6aGOBkhAX0LpKAEhKidixY
nP9PNVBvxgu3XZ4P36gZV6+ummKdBVnc3NqwBLu5+CcdRdusmHPHd5pHf4/38Z3/
6qU2a/fPvWzceVTEgZ47QjFMTCTmCwNt29cvi7zZeQzjtwQgn4ipN9NibRH/Ax/q
TbIzHfrJ1xa2RteWSdFjwtxi9C20HUkjXSeI4YlzQMH0fPX6KCE7aVePTOnB69I/
a9/q96DiXZajwlpq3wFctrs1oXqBp5DVrCIj8hU2wNgB7LtQ1mCtsYz//heai0K9
PhE4X6hiE0YmeAZjR0uHl8M/5aW9xCoJ72+12kKpWAa0SFRWLy6FejNYCYpkupVJ
yecLk/4L1W0l6jQQZnWErXZYe0PNFcmwGXy1Rep83kfBRNKRy5tvocalLlwXLdUk
AIU+2GKjyT3iMuzZxxFxPFMCAwEAAQ==
-----END PUBLIC KEY-----`

block, _ := pem.Decode([]byte(pubPEM))
if block == nil {
    panic("failed to parse PEM block containing the public key")
}

pub, err := x509.ParsePKIXPublicKey(block.Bytes)
if err != nil {
    panic("failed to parse DER encoded public key: " + err.Error())
}

switch pub := pub.(type) {
case *rsa.PublicKey:
    fmt.Println("pub is of type RSA:", pub)
case *dsa.PublicKey:
    fmt.Println("pub is of type DSA:", pub)
case *ecdsa.PublicKey:
    fmt.Println("pub is of type ECDSA:", pub)
case ed25519.PublicKey:
    fmt.Println("pub is of type Ed25519:", pub)
default:
    panic("unknown type of public key")
}

func SetFallbackRoots 1.20

func SetFallbackRoots(roots *CertPool)

SetFallbackRoots устанавливает корневые сертификаты для использования при проверке сертификатов, если не указаны пользовательские корневые сертификаты и не доступен платформенный верификатор или системный пул сертификатов (например, в контейнере, у которого нет пакета корневых сертификатов). SetFallbackRoots вызовет панику, если roots равен null.

SetFallbackRoots можно вызвать только один раз; при повторном вызове произойдёт паника.

Поведение по умолчанию может быть принудительно установлено на всех платформах, даже если есть системный пул сертификатов, установив GODEBUG=x509usefallbackroots=1 (обратите внимание, что в Windows и macOS это отключит использование платформенных API для проверки и заставит использовать чистый Go-верификатор). Установка x509usefallbackroots=1 без вызова SetFallbackRoots не имеет эффекта.

type CertPool

CertPool — это набор сертификатов.

type CertPool struct {
    // contains filtered or unexported fields
}

func NewCertPool

func NewCertPool() *CertPool

NewCertPool возвращает новый пустой CertPool.

func SystemCertPool 1.7

func SystemCertPool() (*CertPool, error)

SystemCertPool возвращает копию системного пула сертификатов.

В системах Unix, кроме macOS, переменные окружения SSL_CERT_FILE и SSL_CERT_DIR могут использоваться для переопределения системных значений по умолчанию для файла SSL-сертификата и каталога файлов SSL-сертификатов соответственно. Последнее может быть списком, разделенным двоеточием.

Любые изменения в возвращённом пуле не записываются на диск и не влияют на любой другой пул, возвращённый SystemCertPool.

Новые изменения в системном пуле сертификатов могут не отображаться в последующих вызовах.

func (*CertPool) AddCert

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

AddCert добавляет сертификат в пул.

func (*CertPool) AddCertWithConstraint 1.22

func (s *CertPool) AddCertWithConstraint(cert *Certificate, constraint func([]*Certificate) error)

AddCertWithConstraint добавляет сертификат в пул с дополнительным ограничением. Когда Certificate.Verify строит цепочку, укоренённую сертификатом cert, он дополнительно передаёт всю цепочку ограничению constraint для определения его валидности. Если constraint возвращает не nil ошибку, цепочка будет отброшена. constraint может вызываться параллельно из нескольких горутин.

func (*CertPool) AppendCertsFromPEM

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

AppendCertsFromPEM пытается разобрать серию PEM-закодированных сертификатов. Он добавляет все найденные сертификаты в s и сообщает, были ли успешно обработаны какие-либо сертификаты.

На многих системах Linux файл /etc/ssl/cert.pem содержит системный набор корневых CA в формате, подходящем для этой функции.

func (*CertPool) Clone 1.19

func (s *CertPool) Clone() *CertPool

Clone возвращает копию s.

func (*CertPool) Equal 1.19

func (s *CertPool) Equal(other *CertPool) bool

Equal сообщает, равны ли s и other.

func (*CertPool) Subjects

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

Subjects возвращает список DER-закодированных субъектов всех сертификатов в пуле.

Устарело: если s был возвращён функцией SystemCertPool, Subjects не будут включать системные корни.

type Certificate

Certificate представляет собой X.509 сертификат.

type Certificate struct {
    Raw                     []byte // Complete ASN.1 DER content (certificate, signature algorithm and signature).
    RawTBSCertificate       []byte // Certificate part of raw ASN.1 DER content.
    RawSubjectPublicKeyInfo []byte // DER encoded SubjectPublicKeyInfo.
    RawSubject              []byte // DER encoded Subject
    RawIssuer               []byte // DER encoded Issuer

    Signature          []byte
    SignatureAlgorithm SignatureAlgorithm

    PublicKeyAlgorithm PublicKeyAlgorithm
    PublicKey          any

    Version             int
    SerialNumber        *big.Int
    Issuer              pkix.Name
    Subject             pkix.Name
    NotBefore, NotAfter time.Time // Validity bounds.
    KeyUsage            KeyUsage

    // Extensions contains raw X.509 extensions. When parsing certificates,
    // this can be used to extract non-critical extensions that are not
    // parsed by this package. When marshaling certificates, the Extensions
    // field is ignored, see ExtraExtensions.
    Extensions []pkix.Extension // Go 1.2

    // ExtraExtensions contains extensions to be copied, raw, into any
    // marshaled certificates. Values override any extensions that would
    // otherwise be produced based on the other fields. The ExtraExtensions
    // field is not populated when parsing certificates, see Extensions.
    ExtraExtensions []pkix.Extension // Go 1.2

    // UnhandledCriticalExtensions contains a list of extension IDs that
    // were not (fully) processed when parsing. Verify will fail if this
    // slice is non-empty, unless verification is delegated to an OS
    // library which understands all the critical extensions.
    //
    // Users can access these extensions using Extensions and can remove
    // elements from this slice if they believe that they have been
    // handled.
    UnhandledCriticalExtensions []asn1.ObjectIdentifier // Go 1.5

    ExtKeyUsage        []ExtKeyUsage           // Sequence of extended key usages.
    UnknownExtKeyUsage []asn1.ObjectIdentifier // Encountered extended key usages unknown to this package.

    // BasicConstraintsValid indicates whether IsCA, MaxPathLen,
    // and MaxPathLenZero are valid.
    BasicConstraintsValid bool
    IsCA                  bool

    // MaxPathLen and MaxPathLenZero indicate the presence and
    // value of the BasicConstraints' "pathLenConstraint".
    //
    // When parsing a certificate, a positive non-zero MaxPathLen
    // means that the field was specified, -1 means it was unset,
    // and MaxPathLenZero being true mean that the field was
    // explicitly set to zero. The case of MaxPathLen==0 with MaxPathLenZero==false
    // should be treated equivalent to -1 (unset).
    //
    // When generating a certificate, an unset pathLenConstraint
    // can be requested with either MaxPathLen == -1 or using the
    // zero value for both MaxPathLen and MaxPathLenZero.
    MaxPathLen int
    // MaxPathLenZero indicates that BasicConstraintsValid==true
    // and MaxPathLen==0 should be interpreted as an actual
    // maximum path length of zero. Otherwise, that combination is
    // interpreted as MaxPathLen not being set.
    MaxPathLenZero bool // Go 1.4

    SubjectKeyId   []byte
    AuthorityKeyId []byte

    // RFC 5280, 4.2.2.1 (Authority Information Access)
    OCSPServer            []string // Go 1.2
    IssuingCertificateURL []string // Go 1.2

    // Subject Alternate Name values. (Note that these values may not be valid
    // if invalid values were contained within a parsed certificate. For
    // example, an element of DNSNames may not be a valid DNS domain name.)
    DNSNames       []string
    EmailAddresses []string
    IPAddresses    []net.IP // Go 1.1
    URIs           []*url.URL // Go 1.10

    // Name constraints
    PermittedDNSDomainsCritical bool // if true then the name constraints are marked critical.
    PermittedDNSDomains         []string
    ExcludedDNSDomains          []string // Go 1.9
    PermittedIPRanges           []*net.IPNet // Go 1.10
    ExcludedIPRanges            []*net.IPNet // Go 1.10
    PermittedEmailAddresses     []string // Go 1.10
    ExcludedEmailAddresses      []string // Go 1.10
    PermittedURIDomains         []string // Go 1.10
    ExcludedURIDomains          []string // Go 1.10

    // CRL Distribution Points
    CRLDistributionPoints []string // Go 1.2

    // 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 // Go 1.22

    // 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 // Go 1.24
    // 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 // Go 1.24

    // 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 // Go 1.24
    // 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 // Go 1.24

    // 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 // Go 1.24
    // 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 // Go 1.24

    // PolicyMappings contains a list of policy mappings included in the certificate.
    PolicyMappings []PolicyMapping // Go 1.24
}

func ParseCertificate

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

ParseCertificate разбирает отдельный сертификат из предоставленных данных ASN.1 DER.

До Go 1.23, ParseCertificate принимал сертификаты с отрицательными номерами серий. Это поведение можно восстановить, включив «x509negativeserial=1» в переменной среды GODEBUG.

func ParseCertificates

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

ParseCertificates разбирает один или несколько сертификатов из предоставленных данных ASN.1 DER. Сертификаты должны быть конкатенированы без промежуточных заполнителей.

func (*Certificate) CheckCRLSignature

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

CheckCRLSignature проверяет, что подпись в crl принадлежит c.

Устарело: Используйте RevocationList.CheckSignatureFrom вместо этого.

func (*Certificate) CheckSignature

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

CheckSignature проверяет, что подпись является действительной подписью над signed с использованием открытого ключа c.

Это API низкого уровня, не выполняющий проверки валидности сертификата.

Подписи MD5WithRSA отклоняются, в то время как подписи SHA1WithRSA и ECDSAWithSHA1 в настоящее время принимаются.

func (*Certificate) CheckSignatureFrom

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

CheckSignatureFrom проверяет, что подпись на c является действительной подписью от parent.

Это API низкого уровня, выполняющий очень ограниченные проверки, и не является полным проверкой цепочки. Большинству пользователей следует использовать Certificate.Verify вместо этого.

func (*Certificate) CreateCRL

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

CreateCRL возвращает DER-закодированный CRL, подписанный этим сертификатом, который содержит предоставленный список отозванных сертификатов.

Устарело: этот метод не генерирует CRL X.509 v2, соответствующий RFC 5280. Для генерации 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 пытается проверить c, построив одну или несколько цепочек от c до сертификата в opts.Roots, используя сертификаты в opts.Intermediates при необходимости. При успешном завершении, он возвращает одну или несколько цепочек, где первый элемент цепочки — c, а последний — из opts.Roots.

Если opts.Roots равен nil, может быть использован платформенный верификатор, и детали проверки могут отличаться от описанных ниже. Если системные корни недоступны, возвращаемая ошибка будет типа SystemRootsError.

Ограничения имён в промежуточных сертификатах будут применяться ко всем именам, заявленным в цепочке, а не только к opts.DNSName. Таким образом, для листка недействительно утверждать example.com, если промежуточный сертификат не разрешает это, даже если example.com не является именем, подлежащим проверке. Обратите внимание, что ограничения DirectoryName не поддерживаются.

Проверка ограничений имён следует правилам из RFC 5280, с добавлением того, что ограничения имён DNS могут использовать формат с ведущей точкой, определённый для адресов электронной почты и URI. Когда ограничение имеет ведущую точку, это указывает, что к ограниченному имени должно быть добавлено по крайней мере одно дополнительное имя, чтобы оно считалось допустимым.

Значения расширенного использования ключа применяются рекурсивно по цепочке, поэтому промежуточный или корневой сертификат, перечисляющий EKUs, препятствует тому, чтобы лист утверждал EKU, отсутствующий в этом списке. (Хотя это не указано в спецификации, это распространённая практика для ограничения типов сертификатов, которые может выдавать CA.)

Сертификаты, использующие подписи SHA1WithRSA и ECDSAWithSHA1, не поддерживаются и не будут использоваться для построения цепочек.

Сертификаты, отличные от c в возвращаемых цепочках, не должны изменяться.

ПРЕДУПРЕЖДЕНИЕ: эта функция не выполняет никаких проверок отзыва.

Пример

Код:

// Verifying with a custom list of root certificates.

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-----`

// First, create the set of root certificates. For this example we only
// have one. It's also possible to omit this in order to use the
// default root set of the current operating system.
roots := x509.NewCertPool()
ok := roots.AppendCertsFromPEM([]byte(rootPEM))
if !ok {
    panic("failed to parse root certificate")
}

block, _ := pem.Decode([]byte(certPEM))
if block == nil {
    panic("failed to parse certificate PEM")
}
cert, err := x509.ParseCertificate(block.Bytes)
if err != nil {
    panic("failed to parse certificate: " + err.Error())
}

opts := x509.VerifyOptions{
    DNSName: "mail.google.com",
    Roots:   roots,
}

if _, err := cert.Verify(opts); err != nil {
    panic("failed to verify certificate: " + err.Error())
}

func (*Certificate) VerifyHostname

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

VerifyHostname возвращает nil, если c является действительным сертификатом для указанного хоста. В противном случае возвращается ошибка, описывающая несоответствие.

IP-адреса могут быть необязательно заключены в квадратные скобки и проверяются на предмет совпадения с полем IPAddresses. Другие имена проверяются без учёта регистра на предмет совпадения с полем DNSNames. Если имена являются валидными именами хостов, поля сертификата могут содержать символ подстановки как самое левое метку (например, *.example.com).

Обратите внимание, что устаревшее поле общего имени игнорируется.

type CertificateInvalidError

CertificateInvalidError возникает при возникновении какой-либо ошибки. Пользователи этой библиотеки, вероятно, захотят обработать все эти ошибки одинаково.

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

func (CertificateInvalidError) Error

func (e CertificateInvalidError) Error() string

type CertificateRequest 1.3

CertificateRequest представляет собой запрос на подпись сертификата PKCS #10.

type CertificateRequest struct {
    Raw                      []byte // Complete ASN.1 DER content (CSR, signature algorithm and signature).
    RawTBSCertificateRequest []byte // Certificate request info part of raw ASN.1 DER content.
    RawSubjectPublicKeyInfo  []byte // DER encoded SubjectPublicKeyInfo.
    RawSubject               []byte // DER encoded Subject.

    Version            int
    Signature          []byte
    SignatureAlgorithm SignatureAlgorithm

    PublicKeyAlgorithm PublicKeyAlgorithm
    PublicKey          any

    Subject pkix.Name

    // Attributes contains the CSR attributes that can parse as
    // pkix.AttributeTypeAndValueSET.
    //
    // Deprecated: Use Extensions and ExtraExtensions instead for parsing and
    // generating the requestedExtensions attribute.
    Attributes []pkix.AttributeTypeAndValueSET

    // Extensions contains all requested extensions, in raw form. When parsing
    // CSRs, this can be used to extract extensions that are not parsed by this
    // package.
    Extensions []pkix.Extension

    // ExtraExtensions contains extensions to be copied, raw, into any CSR
    // marshaled by CreateCertificateRequest. Values override any extensions
    // that would otherwise be produced based on the other fields but are
    // overridden by any extensions specified in Attributes.
    //
    // The ExtraExtensions field is not populated by ParseCertificateRequest,
    // see Extensions instead.
    ExtraExtensions []pkix.Extension

    // Subject Alternate Name values.
    DNSNames       []string
    EmailAddresses []string
    IPAddresses    []net.IP
    URIs           []*url.URL // Go 1.10
}

func ParseCertificateRequest 1.3

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

ParseCertificateRequest разбирает отдельный запрос на сертификат из предоставленных данных ASN.1 DER.

func (*CertificateRequest) CheckSignature 1.5

func (c *CertificateRequest) CheckSignature() error

CheckSignature сообщает, является ли подпись на c валидной.

type ConstraintViolationError

ConstraintViolationError возникает, когда запрошенное использование не разрешено сертификатом. Например, проверка подписи, когда открытый ключ не является ключом для подписи сертификатов.

type ConstraintViolationError struct{}

func (ConstraintViolationError) Error

func (ConstraintViolationError) Error() string

type ExtKeyUsage

ExtKeyUsage представляет собой расширенный набор действий, которые допустимы для данного ключа. Каждый из констант ExtKeyUsage* определяет уникальное действие.

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

type HostnameError

HostnameError возникает, когда набор разрешённых имён не соответствует запрошенному имени.

type HostnameError struct {
    Certificate *Certificate
    Host        string
}

func (HostnameError) Error

func (h HostnameError) Error() string

type InsecureAlgorithmError 1.6

InsecureAlgorithmError указывает, что используемый SignatureAlgorithm для генерации подписи не является безопасным, и подпись отклонена.

type InsecureAlgorithmError SignatureAlgorithm

func (InsecureAlgorithmError) Error 1.6

func (e InsecureAlgorithmError) Error() string

type InvalidReason

type InvalidReason int
const (
    // NotAuthorizedToSign results when a certificate is signed by another
    // which isn't marked as a CA certificate.
    NotAuthorizedToSign InvalidReason = iota
    // Expired results when a certificate has expired, based on the time
    // given in the VerifyOptions.
    Expired
    // CANotAuthorizedForThisName results when an intermediate or root
    // certificate has a name constraint which doesn't permit a DNS or
    // other name (including IP address) in the leaf certificate.
    CANotAuthorizedForThisName
    // TooManyIntermediates results when a path length constraint is
    // violated.
    TooManyIntermediates
    // IncompatibleUsage results when the certificate's key usage indicates
    // that it may only be used for a different purpose.
    IncompatibleUsage
    // NameMismatch results when the subject name of a parent certificate
    // does not match the issuer name in the child.
    NameMismatch
    // NameConstraintsWithoutSANs is a legacy error and is no longer returned.
    NameConstraintsWithoutSANs
    // UnconstrainedName results when a CA certificate contains permitted
    // name constraints, but leaf certificate contains a name of an
    // unsupported or unconstrained type.
    UnconstrainedName
    // TooManyConstraints results when the number of comparison operations
    // needed to check a certificate exceeds the limit set by
    // VerifyOptions.MaxConstraintComparisions. This limit exists to
    // prevent pathological certificates can consuming excessive amounts of
    // CPU time to verify.
    TooManyConstraints
    // CANotAuthorizedForExtKeyUsage results when an intermediate or root
    // certificate does not permit a requested extended key usage.
    CANotAuthorizedForExtKeyUsage
    // NoValidChains results when there are no valid chains to return.
    NoValidChains
)

type KeyUsage

KeyUsage представляет собой набор действий, допустимых для данного ключа. Это битовая маска констант KeyUsage*.

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

type OID 1.22

OID представляет собой ASN.1 OBJECT IDENTIFIER.

type OID struct {
    // contains filtered or unexported fields
}

func OIDFromInts 1.22

func OIDFromInts(oid []uint64) (OID, error)

OIDFromInts создаёт новый OID с использованием целых чисел, каждое целое число является отдельным компонентом.

func ParseOID 1.23

func ParseOID(oid string) (OID, error)

ParseOID разбирает строку объекта идентификатора, представленную ASCII числами, разделёнными точками.

func (OID) AppendBinary 1.24

func (o OID) AppendBinary(b []byte) ([]byte, error)

AppendBinary реализует encoding.BinaryAppender

func (OID) AppendText 1.24

func (o OID) AppendText(b []byte) ([]byte, error)

AppendText реализует encoding.TextAppender

func (OID) Equal 1.22

func (oid OID) Equal(other OID) bool

Equal возвращает true, когда oid и other представляют один и тот же идентификатор объекта.

func (OID) EqualASN1OID 1.22

func (oid OID) EqualASN1OID(other asn1.ObjectIdentifier) bool

EqualASN1OID возвращает true, если OID равен asn1.ObjectIdentifier. Если asn1.ObjectIdentifier не может представить OID, указанный oid, потому что компонент OID требует больше, чем 31 бит, возвращается false.

func (OID) MarshalBinary 1.23

func (o OID) MarshalBinary() ([]byte, error)

MarshalBinary реализует encoding.BinaryMarshaler

func (OID) MarshalText 1.23

func (o OID) MarshalText() ([]byte, error)

MarshalText реализует encoding.TextMarshaler

func (OID) String 1.22

func (oid OID) String() string

String возвращает строковое представление идентификатора объекта.

func (*OID) UnmarshalBinary 1.23

func (o *OID) UnmarshalBinary(b []byte) error

UnmarshalBinary реализует encoding.BinaryUnmarshaler

func (*OID) UnmarshalText 1.23

func (o *OID) UnmarshalText(text []byte) error

UnmarshalText реализует encoding.TextUnmarshaler

тип PEMCipher 1.1

type PEMCipher int

Возможные значения для алгоритма шифрования EncryptPEMBlock.

const (
    PEMCipherDES PEMCipher
    PEMCipher3DES
    PEMCipherAES128
    PEMCipherAES192
    PEMCipherAES256
)

тип PolicyMapping 1.24

PolicyMapping представляет собой запись сопоставления политик в расширении policyMappings.

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
}

тип PublicKeyAlgorithm

type PublicKeyAlgorithm int
const (
    UnknownPublicKeyAlgorithm PublicKeyAlgorithm = iota
    RSA
    DSA // Only supported for parsing.
    ECDSA
    Ed25519
)

функция (PublicKeyAlgorithm) String 1.10

func (algo PublicKeyAlgorithm) String() string

тип RevocationList 1.15

RevocationList представляет собой список отозванных сертификатов (CRL) в соответствии с RFC 5280.

type RevocationList struct {
    // Raw contains the complete ASN.1 DER content of the CRL (tbsCertList,
    // signatureAlgorithm, and signatureValue.)
    Raw []byte // Go 1.19
    // RawTBSRevocationList contains just the tbsCertList portion of the ASN.1
    // DER.
    RawTBSRevocationList []byte // Go 1.19
    // RawIssuer contains the DER encoded Issuer.
    RawIssuer []byte // Go 1.19

    // Issuer contains the DN of the issuing certificate.
    Issuer pkix.Name // Go 1.19
    // AuthorityKeyId is used to identify the public key associated with the
    // issuing certificate. It is populated from the authorityKeyIdentifier
    // extension when parsing a CRL. It is ignored when creating a CRL; the
    // extension is populated from the issuing certificate itself.
    AuthorityKeyId []byte // Go 1.19

    Signature []byte // Go 1.19
    // SignatureAlgorithm is used to determine the signature algorithm to be
    // used when signing the CRL. If 0 the default algorithm for the signing
    // key will be used.
    SignatureAlgorithm SignatureAlgorithm

    // RevokedCertificateEntries represents the revokedCertificates sequence in
    // the CRL. It is used when creating a CRL and also populated when parsing a
    // CRL. When creating a CRL, it may be empty or nil, in which case the
    // revokedCertificates ASN.1 sequence will be omitted from the CRL entirely.
    RevokedCertificateEntries []RevocationListEntry // Go 1.21

    // RevokedCertificates is used to populate the revokedCertificates
    // sequence in the CRL if RevokedCertificateEntries is empty. It may be empty
    // or nil, in which case an empty CRL will be created.
    //
    // Deprecated: Use RevokedCertificateEntries instead.
    RevokedCertificates []pkix.RevokedCertificate

    // Number is used to populate the X.509 v2 cRLNumber extension in the CRL,
    // which should be a monotonically increasing sequence number for a given
    // CRL scope and CRL issuer. It is also populated from the cRLNumber
    // extension when parsing a CRL.
    Number *big.Int

    // ThisUpdate is used to populate the thisUpdate field in the CRL, which
    // indicates the issuance date of the CRL.
    ThisUpdate time.Time
    // NextUpdate is used to populate the nextUpdate field in the CRL, which
    // indicates the date by which the next CRL will be issued. NextUpdate
    // must be greater than ThisUpdate.
    NextUpdate time.Time

    // Extensions contains raw X.509 extensions. When creating a CRL,
    // the Extensions field is ignored, see ExtraExtensions.
    Extensions []pkix.Extension // Go 1.19

    // ExtraExtensions contains any additional extensions to add directly to
    // the CRL.
    ExtraExtensions []pkix.Extension
}

функция ParseRevocationList 1.19

func ParseRevocationList(der []byte) (*RevocationList, error)

ParseRevocationList парсит список отозванных сертификатов X509 v2 из предоставленных данных ASN.1 DER.

функция (*RevocationList) CheckSignatureFrom 1.19

func (rl *RevocationList) CheckSignatureFrom(parent *Certificate) error

CheckSignatureFrom проверяет, является ли подпись на rl действительной подписью от issuer.

тип RevocationListEntry 1.21

RevocationListEntry представляет собой запись в последовательности revokedCertificates CRL.

type RevocationListEntry struct {
    // Raw contains the raw bytes of the revokedCertificates entry. It is set when
    // parsing a CRL; it is ignored when generating a CRL.
    Raw []byte

    // SerialNumber represents the serial number of a revoked certificate. It is
    // both used when creating a CRL and populated when parsing a CRL. It must not
    // be nil.
    SerialNumber *big.Int
    // RevocationTime represents the time at which the certificate was revoked. It
    // is both used when creating a CRL and populated when parsing a CRL. It must
    // not be the zero time.
    RevocationTime time.Time
    // ReasonCode represents the reason for revocation, using the integer enum
    // values specified in RFC 5280 Section 5.3.1. When creating a CRL, the zero
    // value will result in the reasonCode extension being omitted. When parsing a
    // CRL, the zero value may represent either the reasonCode extension being
    // absent (which implies the default revocation reason of 0/Unspecified), or
    // it may represent the reasonCode extension being present and explicitly
    // containing a value of 0/Unspecified (which should not happen according to
    // the DER encoding rules, but can and does happen anyway).
    ReasonCode int

    // Extensions contains raw X.509 extensions. When parsing CRL entries,
    // this can be used to extract non-critical extensions that are not
    // parsed by this package. When marshaling CRL entries, the Extensions
    // field is ignored, see ExtraExtensions.
    Extensions []pkix.Extension
    // ExtraExtensions contains extensions to be copied, raw, into any
    // marshaled CRL entries. Values override any extensions that would
    // otherwise be produced based on the other fields. The ExtraExtensions
    // field is not populated when parsing CRL entries, see Extensions.
    ExtraExtensions []pkix.Extension
}

тип SignatureAlgorithm

type SignatureAlgorithm int
const (
    UnknownSignatureAlgorithm SignatureAlgorithm = iota

    MD2WithRSA  // Unsupported.
    MD5WithRSA  // Only supported for signing, not verification.
    SHA1WithRSA // Only supported for signing, and verification of CRLs, CSRs, and OCSP responses.
    SHA256WithRSA
    SHA384WithRSA
    SHA512WithRSA
    DSAWithSHA1   // Unsupported.
    DSAWithSHA256 // Unsupported.
    ECDSAWithSHA1 // Only supported for signing, and verification of CRLs, CSRs, and OCSP responses.
    ECDSAWithSHA256
    ECDSAWithSHA384
    ECDSAWithSHA512
    SHA256WithRSAPSS
    SHA384WithRSAPSS
    SHA512WithRSAPSS
    PureEd25519
)

функция (SignatureAlgorithm) String 1.6

func (algo SignatureAlgorithm) String() string

тип SystemRootsError 1.1

SystemRootsError возникает, когда не удается загрузить корневые сертификаты системы.

type SystemRootsError struct {
    Err error // Go 1.7
}

функция (SystemRootsError) Error 1.1

func (se SystemRootsError) Error() string

функция (SystemRootsError) Unwrap 1.16

func (se SystemRootsError) Unwrap() error

тип UnhandledCriticalExtension

type UnhandledCriticalExtension struct{}

функция (UnhandledCriticalExtension) Error

func (h UnhandledCriticalExtension) Error() string

тип UnknownAuthorityError

UnknownAuthorityError возникает, когда неизвестен эмитент сертификата.

type UnknownAuthorityError struct {
    Cert *Certificate // Go 1.8
    // contains filtered or unexported fields
}

функция (UnknownAuthorityError) Error

func (e UnknownAuthorityError) Error() string

тип VerifyOptions

VerifyOptions содержит параметры для Certificate.Verify.

type VerifyOptions struct {
    // DNSName, if set, is checked against the leaf certificate with
    // Certificate.VerifyHostname or the platform verifier.
    DNSName string

    // Intermediates is an optional pool of certificates that are not trust
    // anchors, but can be used to form a chain from the leaf certificate to a
    // root certificate.
    Intermediates *CertPool
    // Roots is the set of trusted root certificates the leaf certificate needs
    // to chain up to. If nil, the system roots or the platform verifier are used.
    Roots *CertPool

    // CurrentTime is used to check the validity of all certificates in the
    // chain. If zero, the current time is used.
    CurrentTime time.Time

    // KeyUsages specifies which Extended Key Usage values are acceptable. A
    // chain is accepted if it allows any of the listed values. An empty list
    // means ExtKeyUsageServerAuth. To accept any key usage, include ExtKeyUsageAny.
    KeyUsages []ExtKeyUsage // Go 1.1

    // MaxConstraintComparisions is the maximum number of comparisons to
    // perform when checking a given certificate's name constraints. If
    // zero, a sensible default is used. This limit prevents pathological
    // certificates from consuming excessive amounts of CPU time when
    // validating. It does not apply to the platform verifier.
    MaxConstraintComparisions int // Go 1.10

    // CertificatePolicies specifies which certificate policy OIDs are
    // acceptable during policy validation. An empty CertificatePolices
    // field implies any valid policy is acceptable.
    CertificatePolicies []OID // Go 1.24
    // contains filtered or unexported fields
}

Подкаталоги

Имя Описание
..
pkix Пакет pkix содержит общие, низкоуровневые структуры, используемые для парсинга и сериализации ASN.1 X.509 сертификатов, CRL и OCSP.

© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/crypto/x509/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API