tls

package
v1.23.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 14, 2024 License: MIT Imports: 9 Imported by: 0

Documentation

Overview

tlsパッケージは、RFC 5246で指定されているTLS 1.2と、RFC 8446で指定されているTLS 1.3を部分的に実装しています。

Index

Examples

Constants

View Source
const (
	// TLS 1.0 - 1.2の暗号スイート。
	TLS_RSA_WITH_RC4_128_SHA                      uint16 = 0x0005
	TLS_RSA_WITH_3DES_EDE_CBC_SHA                 uint16 = 0x000a
	TLS_RSA_WITH_AES_128_CBC_SHA                  uint16 = 0x002f
	TLS_RSA_WITH_AES_256_CBC_SHA                  uint16 = 0x0035
	TLS_RSA_WITH_AES_128_CBC_SHA256               uint16 = 0x003c
	TLS_RSA_WITH_AES_128_GCM_SHA256               uint16 = 0x009c
	TLS_RSA_WITH_AES_256_GCM_SHA384               uint16 = 0x009d
	TLS_ECDHE_ECDSA_WITH_RC4_128_SHA              uint16 = 0xc007
	TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA          uint16 = 0xc009
	TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA          uint16 = 0xc00a
	TLS_ECDHE_RSA_WITH_RC4_128_SHA                uint16 = 0xc011
	TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA           uint16 = 0xc012
	TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA            uint16 = 0xc013
	TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA            uint16 = 0xc014
	TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256       uint16 = 0xc023
	TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256         uint16 = 0xc027
	TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256         uint16 = 0xc02f
	TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256       uint16 = 0xc02b
	TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384         uint16 = 0xc030
	TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384       uint16 = 0xc02c
	TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256   uint16 = 0xcca8
	TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 uint16 = 0xcca9

	// TLS 1.3サイファースイート。
	TLS_AES_128_GCM_SHA256       uint16 = 0x1301
	TLS_AES_256_GCM_SHA384       uint16 = 0x1302
	TLS_CHACHA20_POLY1305_SHA256 uint16 = 0x1303

	// TLS_FALLBACK_SCSVは標準の暗号スイートではなく、クライアントがバージョンのフォールバックを行っていることを示すものです。RFC 7507を参照してください。
	TLS_FALLBACK_SCSV uint16 = 0x5600

	// 正しい_SHA256サフィックスを持つ対応する暗号スイートのためのレガシー名前
	// 互換性のために保持されています。
	TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305   = TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
	TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 = TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
)

このパッケージで実装されている、または実装されていた暗号スイートのIDのリストです。

詳細は、https://www.iana.org/assignments/tls-parameters/tls-parameters.xml を参照してください。

View Source
const (
	VersionTLS10 = 0x0301
	VersionTLS11 = 0x0302
	VersionTLS12 = 0x0303
	VersionTLS13 = 0x0304

	// Deprecated: SSLv3は暗号的に破損しており、
	// このパッケージではサポートされていません。golang.org/issue/32716を参照してください。
	VersionSSL30 = 0x0300
)
View Source
const (
	QUICEncryptionLevelInitial = QUICEncryptionLevel(iota)
	QUICEncryptionLevelEarly
	QUICEncryptionLevelHandshake
	QUICEncryptionLevelApplication
)

Variables

This section is empty.

Functions

func CipherSuiteName added in v1.14.0

func CipherSuiteName(id uint16) string

CipherSuiteNameは渡された暗号スイートIDの標準名 (例:「TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256」)を返します。 もしこのパッケージで暗号スイートが実装されていない場合は、IDの値をフォールバック表現として返します。

func Listen

func Listen(network, laddr string, config *Config) (net.Listener, error)

Listenは、net.Listenを使用して、指定されたネットワークアドレスで接続を受け入れるTLSリスナーを作成します。 設定(config)は、nil以外である必要があり、少なくとも1つの証明書を含んでいるか、GetCertificateを設定している必要があります。

func NewListener

func NewListener(inner net.Listener, config *Config) net.Listener

NewListenerは、内部Listenerからの接続を受け入れ、それぞれの接続を Server でラップするListenerを作成します。 設定configはnilではなく、少なくとも1つの証明書を含むか、それ以外の場合はGetCertificateを設定する必要があります。

func VersionName added in v1.21.0

func VersionName(version uint16) string

VersionNameは提供されたTLSバージョン番号の名前(例:"TLS 1.3")を返します。 もしバージョンがこのパッケージで実装されていない場合は、値のフォールバック表現を返します。

Types

type AlertError added in v1.21.0

type AlertError uint8

AlertErrorはTLSアラートです。

QUICトランスポートを使用する場合、QUICConnのメソッドは TLSアラートを送信する代わりにAlertErrorをラップしたエラーを返します。

func (AlertError) Error added in v1.21.0

func (e AlertError) Error() string

type Certificate

type Certificate struct {
	Certificate [][]byte

	// PrivateKeyは、Leafの公開鍵に対応する秘密鍵を含んでいます。
	// これは、RSA、ECDSA、またはEd25519 PublicKeyを使用してcrypto.Signerを実装する必要があります。
	// TLS 1.2までのサーバーの場合、RSA PublicKeyを使用してcrypto.Decrypterも実装できます。
	PrivateKey crypto.PrivateKey

	// SupportedSignatureAlgorithmsは、PrivateKeyが使用できる署名アルゴリズムを制限するオプションのリストです。
	SupportedSignatureAlgorithms []SignatureScheme

	// OCSPStapleには、リクエストするクライアントに提供されるオプションのOCSP応答が含まれています。
	OCSPStaple []byte

	// SignedCertificateTimestampsには、要求するクライアントに提供されるオプションの署名付き証明書タイムスタンプのリストが含まれています。
	SignedCertificateTimestamps [][]byte

	// Leafは、パースされたリーフ証明書の形式であり、x509.ParseCertificateを使用して初期化することができます。
	// デフォルトではnilである場合、リーフ証明書は必要に応じてパースされます。
	Leaf *x509.Certificate
}

ボタン構造体は、最初にリーフ(最下位)のボタンから始まり、その上位にある1つ以上のボタンのチェーンです。

func LoadX509KeyPair

func LoadX509KeyPair(certFile, keyFile string) (Certificate, error)

LoadX509KeyPairは、ペアのファイルから公開/秘密鍵ペアを読み込んで解析します。 ファイルにはPEMエンコードされたデータが含まれている必要があります。証明書ファイルには、 リーフ証明書に続く中間証明書が含まれている場合があり、証明書チェーンを形成します。 成功時の戻り値では、Certificate.Leafが設定されます。

Go 1.23以前ではCertificate.Leafはnilのままで、解析された証明書は破棄されました。 この挙動は、GODEBUG環境変数で"x509keypairleaf=0"を設定することで再度有効にすることができます。

Example
package main

import (
	"github.com/shogo82148/std/crypto/tls"
	"github.com/shogo82148/std/log"
)

func main() {
	cert, err := tls.LoadX509KeyPair("testdata/example-cert.pem", "testdata/example-key.pem")
	if err != nil {
		log.Fatal(err)
	}
	cfg := &tls.Config{Certificates: []tls.Certificate{cert}}
	listener, err := tls.Listen("tcp", ":2000", cfg)
	if err != nil {
		log.Fatal(err)
	}
	_ = listener
}
Output:

func X509KeyPair

func X509KeyPair(certPEMBlock, keyPEMBlock []byte) (Certificate, error)

X509KeyPairは、ペアのPEMエンコードされたデータから公開/秘密鍵ペアを解析します。成功時の戻り値では、Certificate.Leafが設定されます。

Go 1.23以前ではCertificate.Leafはnilのままで、解析された証明書は破棄されました。この挙動は、GODEBUG環境変数で"x509keypairleaf=0" を設定することで再度有効にすることができます。

Example
package main

import (
	"github.com/shogo82148/std/crypto/tls"
	"github.com/shogo82148/std/log"
)

func main() {
	certPem := []byte(`-----BEGIN CERTIFICATE-----
MIIBhTCCASugAwIBAgIQIRi6zePL6mKjOipn+dNuaTAKBggqhkjOPQQDAjASMRAw
DgYDVQQKEwdBY21lIENvMB4XDTE3MTAyMDE5NDMwNloXDTE4MTAyMDE5NDMwNlow
EjEQMA4GA1UEChMHQWNtZSBDbzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABD0d
7VNhbWvZLWPuj/RtHFjvtJBEwOkhbN/BnnE8rnZR8+sbwnc/KhCk3FhnpHZnQz7B
5aETbbIgmuvewdjvSBSjYzBhMA4GA1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggr
BgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1UdEQQiMCCCDmxvY2FsaG9zdDo1
NDUzgg4xMjcuMC4wLjE6NTQ1MzAKBggqhkjOPQQDAgNIADBFAiEA2zpJEPQyz6/l
Wf86aX6PepsntZv2GYlA5UpabfT2EZICICpJ5h/iI+i341gBmLiAFQOyTDT+/wQc
6MF9+Yw1Yy0t
-----END CERTIFICATE-----`)
	keyPem := []byte(`-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIIrYSSNQFaA2Hwf1duRSxKtLYX5CB04fSeQ6tF1aY/PuoAoGCCqGSM49
AwEHoUQDQgAEPR3tU2Fta9ktY+6P9G0cWO+0kETA6SFs38GecTyudlHz6xvCdz8q
EKTcWGekdmdDPsHloRNtsiCa697B2O9IFA==
-----END EC PRIVATE KEY-----`)
	cert, err := tls.X509KeyPair(certPem, keyPem)
	if err != nil {
		log.Fatal(err)
	}
	cfg := &tls.Config{Certificates: []tls.Certificate{cert}}
	listener, err := tls.Listen("tcp", ":2000", cfg)
	if err != nil {
		log.Fatal(err)
	}
	_ = listener
}
Output:

Example (HttpServer)
package main

import (
	"github.com/shogo82148/std/crypto/tls"
	"github.com/shogo82148/std/log"
	"github.com/shogo82148/std/net/http"
	"github.com/shogo82148/std/time"
)

func main() {
	certPem := []byte(`-----BEGIN CERTIFICATE-----
MIIBhTCCASugAwIBAgIQIRi6zePL6mKjOipn+dNuaTAKBggqhkjOPQQDAjASMRAw
DgYDVQQKEwdBY21lIENvMB4XDTE3MTAyMDE5NDMwNloXDTE4MTAyMDE5NDMwNlow
EjEQMA4GA1UEChMHQWNtZSBDbzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABD0d
7VNhbWvZLWPuj/RtHFjvtJBEwOkhbN/BnnE8rnZR8+sbwnc/KhCk3FhnpHZnQz7B
5aETbbIgmuvewdjvSBSjYzBhMA4GA1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggr
BgEFBQcDATAPBgNVHRMBAf8EBTADAQH/MCkGA1UdEQQiMCCCDmxvY2FsaG9zdDo1
NDUzgg4xMjcuMC4wLjE6NTQ1MzAKBggqhkjOPQQDAgNIADBFAiEA2zpJEPQyz6/l
Wf86aX6PepsntZv2GYlA5UpabfT2EZICICpJ5h/iI+i341gBmLiAFQOyTDT+/wQc
6MF9+Yw1Yy0t
-----END CERTIFICATE-----`)
	keyPem := []byte(`-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIIrYSSNQFaA2Hwf1duRSxKtLYX5CB04fSeQ6tF1aY/PuoAoGCCqGSM49
AwEHoUQDQgAEPR3tU2Fta9ktY+6P9G0cWO+0kETA6SFs38GecTyudlHz6xvCdz8q
EKTcWGekdmdDPsHloRNtsiCa697B2O9IFA==
-----END EC PRIVATE KEY-----`)
	cert, err := tls.X509KeyPair(certPem, keyPem)
	if err != nil {
		log.Fatal(err)
	}
	cfg := &tls.Config{Certificates: []tls.Certificate{cert}}
	srv := &http.Server{
		TLSConfig:    cfg,
		ReadTimeout:  time.Minute,
		WriteTimeout: time.Minute,
	}
	log.Fatal(srv.ListenAndServeTLS("", ""))
}
Output:

type CertificateRequestInfo added in v1.8.0

type CertificateRequestInfo struct {

	// AcceptableCAsは、ゼロまたは複数のDERエンコードされたX.501の区別名を含んでいます。これらは、サーバーが返される証明書の署名元として望むルートまたは中間CAの名前です。空のスライスは、サーバーが好みを持たないことを示します。
	AcceptableCAs [][]byte

	// SignatureSchemesは、サーバーが検証を行いたい署名スキームをリストアップします。
	SignatureSchemes []SignatureScheme

	// Versionは、この接続のために交渉されたTLSのバージョンです。
	Version uint16
	// contains filtered or unexported fields
}

CertificateRequestInfo は、クライアントから証明書とコントロールの証明を要求するために使用される、 サーバーの CertificateRequest メッセージからの情報を含んでいます。

func (*CertificateRequestInfo) Context added in v1.17.0

func (c *CertificateRequestInfo) Context() context.Context

Contextは進行中のハンドシェイクのコンテキストを返します。 このコンテキストは、HandshakeContextに渡されたコンテキストの子であり、 ハンドシェイクが終了するとキャンセルされます。

func (*CertificateRequestInfo) SupportsCertificate added in v1.14.0

func (cri *CertificateRequestInfo) SupportsCertificate(c *Certificate) error

SupportsCertificateは、提供された証明書がCertificateRequestを送信したサーバーによってサポートされている場合はnilを返します。それ以外の場合、非互換性の理由を説明するエラーが返されます。

type CertificateVerificationError added in v1.20.0

type CertificateVerificationError struct {
	// UnverifiedCertificatesおよびその内容は変更しないでください。
	UnverifiedCertificates []*x509.Certificate
	Err                    error
}

CertificateVerificationError は、ハンドシェイク中に証明書の検証が失敗した場合に返されます。

func (*CertificateVerificationError) Error added in v1.20.0

func (*CertificateVerificationError) Unwrap added in v1.20.0

func (e *CertificateVerificationError) Unwrap() error

type CipherSuite added in v1.14.0

type CipherSuite struct {
	ID   uint16
	Name string

	// Supported versionsは、この暗号スイートをネゴシエートできるTLSプロトコルのバージョンのリストです。
	SupportedVersions []uint16

	// Insecureは、そのプリミティブ、設計、または実装による既知のセキュリティ問題があるため、暗号スイートが安全ではない場合にtrueとなります。
	Insecure bool
}

CipherSuiteはTLSの暗号スイートです。このパッケージのほとんどの関数は、この型の代わりに暗号スイートのIDを受け入れて公開します。

func CipherSuites added in v1.14.0

func CipherSuites() []*CipherSuite

CipherSuitesは、このパッケージで現在実装されている暗号スイートのリストを返します。 ただし、セキュリティ上の問題があるものは InsecureCipherSuites によって返されます。

このリストはIDでソートされています。このパッケージによって選択されるデフォルトの暗号スイートが、 静的なリストでは捉えることができないロジックに依存している場合があり、 この関数によって返されるものと一致しない場合があります。

func InsecureCipherSuites added in v1.14.0

func InsecureCipherSuites() []*CipherSuite

InsecureCipherSuitesは、現在このパッケージで実装されているセキュリティ上の問題を抱えた暗号スイートのリストを返します。 ほとんどのアプリケーションは、このリストに含まれる暗号スイートを使用すべきではありません。代わりに、 CipherSuites で返されるスイートのみを使用するべきです。

type ClientAuthType

type ClientAuthType int

ClientAuthTypeは、TLSクライアント認証に関するサーバーのポリシーを宣言します。

const (

	// NoClientCertはハンドシェイク中にクライアント証明書を要求しないことを示し、
	// 送信された証明書があっても検証されないことを意味します。
	NoClientCert ClientAuthType = iota

	// RequestClientCertは、ハンドシェイク中にクライアント証明書の要求を示しますが、クライアントが証明書を送信することは必要ありません。
	RequestClientCert

	// RequireAnyClientCertは、ハンドシェイク中にクライアント証明書を要求し、
	// クライアントから少なくとも1つの証明書の送信が必要であることを示しますが、
	// その証明書が有効である必要はありません。
	RequireAnyClientCert

	// VerifyClientCertIfGivenは、ハンドシェイク中にクライアント証明書の要求をすることを示しますが、クライアントが証明書を送信する必要はありません。ただし、クライアントが証明書を送信する場合は、その証明書が有効であることが必要です。
	VerifyClientCertIfGiven

	// RequireAndVerifyClientCertは、ハンドシェイク中にクライアント証明書の要求が行われることを示し、クライアントが少なくとも1つの有効な証明書を送信する必要があることを示します。
	RequireAndVerifyClientCert
)

func (ClientAuthType) String added in v1.15.0

func (i ClientAuthType) String() string

type ClientHelloInfo added in v1.4.0

type ClientHelloInfo struct {

	// CipherSuitesはクライアントがサポートするCipherSuitesをリストアップしています(例:TLS_AES_128_GCM_SHA256、TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)。
	CipherSuites []uint16

	// ServerNameは、クライアントがリクエストしたサーバーの名前を示します。
	// 仮想ホスティングをサポートするために、クライアントがSNIを使用している場合にのみ、ServerNameが設定されます(RFC 4366、セクション3.1を参照)。
	ServerName string

	// SupportedCurvesはクライアントでサポートされている楕円曲線をリストアップしています。
	// SupportedCurvesは、サポートされている楕円曲線拡張が使用されている場合にのみ設定されます(RFC 4492、セクション5.1.1を参照)。
	SupportedCurves []CurveID

	// SupportedPointsはクライアントがサポートするポイントフォーマットをリストアップしています。
	// SupportedPointsは、サポートされているポイントフォーマット拡張が利用されている場合にのみ設定されます(RFC 4492、セクション5.1.2を参照)。
	SupportedPoints []uint8

	// SignatureSchemesは、クライアントが検証可能な署名とハッシュ方式のリストです。SignatureSchemesは、Signature Algorithms拡張が使用されている場合にのみ設定されます(RFC 5246、セクション7.4.1.4.1を参照)。
	SignatureSchemes []SignatureScheme

	// SupportedProtosはクライアントがサポートしているアプリケーションプロトコルのリストです。
	// SupportedProtosは、アプリケーション層プロトコルネゴシエーション拡張が使用されている場合にのみ設定されます(RFC 7301、セクション3.1を参照)。
	//
	// サーバーは、GetConfigForClientの返り値でConfig.NextProtosを設定することでプロトコルを選択できます。
	SupportedProtos []string

	// SupportedVersions はクライアントでサポートされているTLSのバージョンをリストにします。
	// TLSバージョン1.3未満では、これはクライアントがアドバタイズする最大のバージョンから予測されるため、最大の値以外の値は使用されると拒否される可能性があります。
	SupportedVersions []uint16

	// Extensions lists the IDs of the extensions presented by the client
	// in the client hello.
	Extensions []uint16

	// Connは接続の基礎となるnet.Connです。この接続から読み取ったり、書き込んだりしないでください。それはTLS接続の失敗を引き起こします。
	Conn net.Conn
	// contains filtered or unexported fields
}

ClientHelloInfoには、GetCertificateおよびGetConfigForClientのコールバックにおいて、 アプリケーションロジックをガイドするためのClientHelloメッセージからの情報が含まれています。

func (*ClientHelloInfo) Context added in v1.17.0

func (c *ClientHelloInfo) Context() context.Context

Contextは進行中のハンドシェイクのコンテキストを返します。 このコンテキストは、HandshakeContextに渡されたコンテキストの子孫であり、 ハンドシェイクが終了するとキャンセルされます。

func (*ClientHelloInfo) SupportsCertificate added in v1.14.0

func (chi *ClientHelloInfo) SupportsCertificate(c *Certificate) error

SupportsCertificateは、提供された証明書が ClientHelloを送信したクライアントによってサポートされている場合にはnilを返します。そうでない場合は、互換性のない理由を説明するエラーを返します。

この ClientHelloInfo がGetConfigForClientまたはGetCertificateコールバックに渡された場合、このメソッドは関連する Config を考慮に入れます。ただし、GetConfigForClientが異なる Config を返す場合、このメソッドでは変更を考慮することができません。

c.Leafが設定されていない場合、この関数はx509.ParseCertificateを呼び出しますが、それはかなりのパフォーマンスコストを伴うことになります。

type ClientSessionCache added in v1.3.0

type ClientSessionCache interface {
	Get(sessionKey string) (session *ClientSessionState, ok bool)

	Put(sessionKey string, cs *ClientSessionState)
}

ClientSessionCacheは、クライアントが特定のサーバーとTLSセッションを再開するために使用できるClientSessionStateオブジェクトのキャッシュです。ClientSessionCacheの実装は、異なるゴルーチンから同時に呼び出されることを想定しています。TLS 1.2までは、SessionIDベースの再開ではなく、チケットベースの再開のみがサポートされています。TLS 1.3では、これらがPSKモードにマージされ、このインターフェースを介してサポートされています。

func NewLRUClientSessionCache added in v1.3.0

func NewLRUClientSessionCache(capacity int) ClientSessionCache

NewLRUClientSessionCacheは、与えられた容量を使用してLRU戦略を採用した ClientSessionCache を返します。容量が1未満の場合、代わりにデフォルトの容量が使用されます。

type ClientSessionState added in v1.3.0

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

ClientSessionState は、クライアントが前のTLSセッションを再開するために必要な状態を含んでいます。

func NewResumptionState added in v1.21.0

func NewResumptionState(ticket []byte, state *SessionState) (*ClientSessionState, error)

NewResumptionStateは、前のセッションを再開するために[ClientSessionCache.Get]によって返されるstate値を返します。

stateは[ParseSessionState]によって返される必要があり、ticketとsessionの状態は[ClientSessionState.ResumptionState]によって返される必要があります。

func (*ClientSessionState) ResumptionState added in v1.21.0

func (cs *ClientSessionState) ResumptionState() (ticket []byte, state *SessionState, err error)

ResumptionStateは、サーバーが送信したセッションチケット(セッションの識別子としても知られている)と、このセッションを再開するために必要な状態を返します。

[ClientSessionCache.Put]によって呼び出され、セッションをシリアル化([SessionState.Bytes]を使用)して保存することができます。

type Config

type Config struct {

	// RandはノンスやRSAブラインディングのエントロピーの源を提供します。
	// もしRandがnilの場合、TLSはパッケージcrypto/randの暗号化されたランダムリーダーを使用します。
	// このリーダーは複数のゴルーチンによる使用に安全である必要があります。
	Rand io.Reader

	// Timeはエポックからの経過秒数として現在時刻を返します。
	// Timeがnilの場合、TLSはtime.Nowを使用します。
	Time func() time.Time

	// Certificatesは、接続の相手側に提供する1つ以上の証明書チェーンを含んでいます。相手側の要件と互換性のある最初の証明書が自動的に選択されます。
	//
	// サーバーの設定では、Certificates、GetCertificate、またはGetConfigForClientのいずれかを設定する必要があります。クライアント認証を行うクライアントは、CertificatesまたはGetClientCertificateのいずれかを設定することができます。
	//
	// 注意:複数のCertificatesがあり、オプションのLeafフィールドが設定されていない場合、証明書の選択には著しいハンドシェイクごとのパフォーマンスのコストがかかります。
	Certificates []Certificate

	// NameToCertificate は、証明書名を Certificates の要素にマッピングします。
	// 証明書名は'*.example.com'のような形式であるため、必ずしもドメイン名である必要はありません。
	//
	// Deprecated: NameToCertificate では、特定の名前に対して単一の証明書の関連付けしか許可されません。
	// このフィールドを nil のままにしておくと、ライブラリが Certificates から最初の互換性のあるチェーンを選択します。
	NameToCertificate map[string]*Certificate

	// GetCertificateは与えられたClientHelloInfoに基づいて証明書を返します。
	// クライアントがSNI情報を提供する場合またはCertificatesが空の場合のみ呼び出されます。
	//
	// GetCertificateがnilであるかnilを返す場合、証明書はNameToCertificateから取得されます。
	// NameToCertificateがnilの場合、Certificatesの最良の要素が使用されます。
	//
	// 一度証明書が返されたら、変更しないでください。
	GetCertificate func(*ClientHelloInfo) (*Certificate, error)

	// GetClientCertificateは、クライアントが証明書を要求する場合に呼び出されます。
	// 設定されている場合、Certificatesの内容は無視されます。
	//
	// GetClientCertificateがエラーを返すと、ハンドシェイクは中止され、そのエラーが返されます。
	// それ以外の場合、GetClientCertificateはnilではないCertificateを返さなければなりません。
	// Certificate.Certificateが空である場合、サーバーには証明書は送信されません。
	// サーバーがこれを受け入れられない場合、ハンドシェイクを中止することがあります。
	//
	// GetClientCertificateは、再協議が発生するか、TLS 1.3が使用されている場合に、同じ接続に対して複数回呼び出される可能性があります。
	//
	// 一度Certificateが返されたら、変更しないでください。
	GetClientCertificate func(*CertificateRequestInfo) (*Certificate, error)

	// GetConfigForClientは、クライアントからClientHelloが受信された後に呼び出されます。この接続を処理するために使用されるConfigを変更するために、非nilのConfigを返すことができます。返されたConfigがnilの場合、元のConfigが使用されます。このコールバックによって返されたConfigは、後で変更できません。
	//
	// GetConfigForClientがnilの場合、Server()に渡されたConfigがすべての接続に使用されます。
	//
	// 返されたConfigに明示的にSessionTicketKeyが設定されている場合、または返されたConfigにSetSessionTicketKeysが呼び出された場合、これらのキーが使用されます。それ以外の場合、元のConfigキーが使用されます(自動的に管理される場合、回転する可能性もあります)。
	GetConfigForClient func(*ClientHelloInfo) (*Config, error)

	// VerifyPeerCertificate は、TLSクライアントまたはサーバーによる通常の証明書検証の後に呼び出されます(nilでない場合)。この関数は、ピアから提供された生のASN.1証明書と、通常の処理で検証されたチェーンを受け取ります。もしnon-nilのエラーを返す場合、ハンドシェイクは中断され、そのエラーが結果となります。
	// 通常の検証に失敗した場合、このコールバックは検討される前にハンドシェイクが中断されます。通常の検証が無効になっている場合(InsecureSkipVerifyがクライアント側で設定されている場合、またはServerAuthがRequestClientCertまたはRequireAnyClientCertの場合)、このコールバックは考慮されますが、verifiedChains引数は常にnilになります。ClientAuthがNoClientCertの場合、このコールバックはサーバーで呼び出されません。rawCertsは、ClientAuthがRequestClientCertまたはVerifyClientCertIfGivenの場合には、サーバーで空になる可能性があります。
	// このコールバックは再開された接続では呼び出されず、証明書は再検証されません。
	// verifiedChainsとその内容は変更しないでください。
	VerifyPeerCertificate func(rawCerts [][]byte, verifiedChains [][]*x509.Certificate) error

	// VerifyConnectionは、通常の証明書の検証とVerifyPeerCertificateの後に、TLSクライアントまたはサーバーによって呼び出されます(nilではない場合)。非nilのエラーが返された場合、ハンドシェイクは中止されます。
	// 通常の検証が失敗した場合、このコールバックは考慮される前にハンドシェイクが中止されます。このコールバックは、InsecureSkipVerifyまたはClientAuthの設定に関係なく、再開を含むすべての接続で実行されます。
	VerifyConnection func(ConnectionState) error

	// RootCAsは、クライアントがサーバー証明書を検証する際に使用するルート証明書機関のセットを定義します。
	// RootCAsがnilの場合、TLSはホストのルートCAセットを使用します。
	RootCAs *x509.CertPool

	// NextProtosはサポートされているアプリケーションレベルのプロトコルのリストで、
	// 優先順位順に表示されます。両方のピアがALPNをサポートする場合、
	// 選択されるプロトコルはこのリストから選ばれ、相互にサポートされるプロトコルがない場合は接続が失敗します。
	// NextProtosが空であるか、ピアがALPNをサポートしていない場合、接続は成功し、
	// ConnectionState.NegotiatedProtocolは空になります。
	NextProtos []string

	// ServerNameは返された証明書のホスト名の検証に使用されます(InsecureSkipVerifyが指定されていない場合)。また、IPアドレスでない限り、クライアントのハンドシェイクに仮想ホスティングをサポートするために含まれます。
	ServerName string

	// ClientAuthは、TLSクライアント認証のサーバーポリシーを決定します。デフォルトはNoClientCertです。
	ClientAuth ClientAuthType

	// ClientCAsは、ClientAuthのポリシーに従って
	// クライアント証明書の検証が必要な場合、
	// サーバーが使用するルート証明機関のセットを定義します。
	ClientCAs *x509.CertPool

	// InsecureSkipVerifyは、クライアントがサーバーの証明書チェーンとホスト名を検証するかどうかを制御します。
	// InsecureSkipVerifyがtrueの場合、crypto/tlsパッケージは、サーバーが提示する証明書とその証明書内の任意のホスト名を受け入れます。
	// このモードでは、カスタムな検証が使用されていない限り、TLSはマンインザミドル攻撃に対して脆弱です。
	// これはテスト目的でのみ使用するか、VerifyConnectionまたはVerifyPeerCertificateと組み合わせて使用する必要があります。
	InsecureSkipVerify bool

	// CipherSuitesは有効なTLS 1.0-1.2の暗号化スイートのリストです。リストの順序は無視されます。注意事項として、TLS 1.3の暗号スイートは設定できません。
	//
	// CipherSuitesがnilの場合、安全なデフォルトリストが使用されます。デフォルトの暗号スイートは時間とともに変更される可能性があります。
	// Go 1.22では、RSA鍵交換ベースの暗号スイートがデフォルトリストから削除されましたが、GODEBUG設定tlsrsakex=1で再追加できます。
	// Go 1.23では、3DES暗号スイートがデフォルトリストから削除されましたが、GODEBUG設定tls3des=1で再追加できます。
	CipherSuites []uint16

	// PreferServerCipherSuitesは古いフィールドであり、効果がありません。
	//
	// かつて、このフィールドは、サーバーがクライアントの選好またはサーバーの選好に従うかどうかを制御していました。現在、サーバーは、推測されたクライアントのハードウェア、サーバーのハードウェア、およびセキュリティを考慮した論理に基づいて、最も相互にサポートされた暗号スイートを選択します。
	//
	// Deprecated: PreferServerCipherSuitesは無視されます。
	PreferServerCipherSuites bool

	// SessionTicketsDisabledがtrueに設定されると、セッションチケットおよびPSK(再開)のサポートが無効になります。クライアントでは、ClientSessionCacheがnilの場合もセッションチケットのサポートが無効になります。
	SessionTicketsDisabled bool

	// SessionTicketKeyは、セッション再開を提供するためにTLSサーバーによって使用されます。
	// RFC 5077およびRFC 8446のPSKモードを参照してください。ゼロの場合、最初のサーバーハンドシェイクの前にランダムデータで埋められます。
	//
	// 廃止: このフィールドがゼロのままになっている場合、セッションチケットキーは自動的に毎日回転され、7日後に削除されます。
	// 回転スケジュールのカスタマイズや同じホストに対して接続を終了するサーバーの同期を行う場合は、SetSessionTicketKeysを使用してください。
	SessionTicketKey [32]byte

	// ClientSessionCacheはTLSセッション再開のためのClientSessionStateエントリのキャッシュです。
	// クライアント側でのみ使用されます。
	ClientSessionCache ClientSessionCache

	// UnwrapSessionは、[WrapSession]によって生成されたチケット/アイデンティティを、使用可能なセッションに変換するためにサーバー上で呼び出されます。
	//
	// UnwrapSessionは通常、チケット内のセッション状態を復号化するか(たとえば、[Config.EncryptTicket]を使用して)、以前に保存された状態を回復するためにチケットを使用します。セッション状態を逆シリアル化するには、[ParseSessionState]を使用する必要があります。
	//
	// UnwrapSessionがエラーを返した場合、接続は終了されます。(nil、nil)を返す場合、セッションは無視されます。crypto/tlsは、それでも返されたセッションを再開しないこともあります。
	UnwrapSession func(identity []byte, cs ConnectionState) (*SessionState, error)

	// WrapSessionはサーバーで呼び出され、セッションのチケット/アイデンティティを生成します。
	//
	// WrapSessionはセッションの状態を[SessionState.Bytes]でシリアライズする必要があります。
	// 次に、シリアライズされた状態を暗号化する(たとえば[Config.DecryptTicket]で)または状態を保存して
	// ハンドルを返すことができます。
	//
	// WrapSessionがエラーを返すと、接続は終了します。
	//
	// 警告:返り値は平文でワイヤー上やクライアントに公開されます。
	// アプリケーションはそれを暗号化し、認証する(およびキーをローテーションする)
	// または高エントロピーの識別子を返すことが責任です。
	// 正しく行わないと、現在の接続や以前の接続、将来の接続が妥協される可能性があります。
	//
	WrapSession func(ConnectionState, *SessionState) ([]byte, error)

	// MinVersionには受け入れ可能な最小のTLSバージョンが含まれています。
	//
	// デフォルトでは、現在TLS 1.2が最小限として使用されています。TLS 1.0は、
	// このパッケージがサポートする最小限です。
	//
	// サーバーサイドのデフォルトは、GODEBUG環境変数に値
	// "tls10server=1"を含めることでTLS 1.0に戻すことができます。
	MinVersion uint16

	// MaxVersionには許容される最大のTLSバージョンが含まれています。
	//
	// デフォルトでは、このパッケージでサポートされている最大バージョンが使用されます。
	// 現在のバージョンはTLS 1.3です。
	MaxVersion uint16

	// CurvePreferencesには、ECDHEハンドシェイクで使用される楕円曲線が好まれる順に含まれます。空の場合、デフォルトが使用されます。クライアントは、TLS 1.3でキーシェアのタイプとして最初の選択肢を使用します。将来的には、これは変更される可能性があります。
	//
	// Go 1.23から、デフォルトにはX25519Kyber768Draft00ハイブリッドポスト量子鍵交換が含まれます。
	// これを無効にするには、CurvePreferencesを明示的に設定するか、GODEBUG=tlskyber=0環境変数を使用します。
	CurvePreferences []CurveID

	// DynamicRecordSizingDisabledはTLSレコードの適応的なサイズ調整を無効にします。
	// trueの場合、常に最大のTLSレコードサイズが使用されます。falseの場合、
	// TLSレコードのサイズはレイテンシを改善するために調整されることがあります。
	DynamicRecordSizingDisabled bool

	// Renegotiationは、再交渉がサポートされるタイプを制御します。
	// デフォルトの「なし」は、ほとんどのアプリケーションにとって正しいです。
	Renegotiation RenegotiationSupport

	// KeyLogWriterは、TLSのマスターシークレットの宛先として使用できる、NSSキーログ形式の外部プログラム(Wiresharkなど)によるTLS接続の復号化を許可するためのオプションです。
	// https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Formatを参照してください。
	// KeyLogWriterの使用はセキュリティを損なう可能性があり、デバッグ目的のみに使用するべきです。
	KeyLogWriter io.Writer

	// EncryptedClientHelloConfigList is a serialized ECHConfigList. If
	// provided, clients will attempt to connect to servers using Encrypted
	// Client Hello (ECH) using one of the provided ECHConfigs. Servers
	// currently ignore this field.
	//
	// If the list contains no valid ECH configs, the handshake will fail
	// and return an error.
	//
	// If EncryptedClientHelloConfigList is set, MinVersion, if set, must
	// be VersionTLS13.
	//
	// When EncryptedClientHelloConfigList is set, the handshake will only
	// succeed if ECH is sucessfully negotiated. If the server rejects ECH,
	// an ECHRejectionError error will be returned, which may contain a new
	// ECHConfigList that the server suggests using.
	//
	// How this field is parsed may change in future Go versions, if the
	// encoding described in the final Encrypted Client Hello RFC changes.
	EncryptedClientHelloConfigList []byte

	// EncryptedClientHelloRejectionVerify, if not nil, is called when ECH is
	// rejected, in order to verify the ECH provider certificate in the outer
	// Client Hello. If it returns a non-nil error, the handshake is aborted and
	// that error results.
	//
	// Unlike VerifyPeerCertificate and VerifyConnection, normal certificate
	// verification will not be performed before calling
	// EncryptedClientHelloRejectionVerify.
	//
	// If EncryptedClientHelloRejectionVerify is nil and ECH is rejected, the
	// roots in RootCAs will be used to verify the ECH providers public
	// certificate. VerifyPeerCertificate and VerifyConnection are not called
	// when ECH is rejected, even if set, and InsecureSkipVerify is ignored.
	EncryptedClientHelloRejectionVerify func(ConnectionState) error
	// contains filtered or unexported fields
}

Config構造体はTLSクライアントやサーバーを設定するために使用されます。 ConfigがTLS関数に渡された後は変更しないでください。 Configは再利用することができますが、tlsパッケージ自体は変更しません。

Example (KeyLogWriter)
// ネットワークトラフィックキャプチャを復号化してTLSアプリケーションをデバッグする。

// 警告: KeyLogWriterの使用はセキュリティを損なう可能性があり、
// デバッグ目的でのみ使用すべきです。

// 再現性があるように、ダミーテストのためのHTTPサーバーです。セキュリティのないランダムを使用しているので、出力も同じになります。
server := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {}))
server.TLS = &tls.Config{
	Rand: zeroSource{}, // この例はただのサンプルです。これは実際には行わないでください。
}
server.StartTLS()
defer server.Close()

// 通常、ログは開かれたファイルに保存されます:
// w、err:= os.OpenFile("tls-secrets.txt"、os.O_WRONLY | os.O_CREATE | os.O_TRUNC、0600)
w := os.Stdout

client := &http.Client{
	Transport: &http.Transport{
		TLSClientConfig: &tls.Config{
			KeyLogWriter: w,

			Rand:               zeroSource{}, // 再現可能な出力のために、これを行わないでください。
			InsecureSkipVerify: true,         // テストサーバー証明書は信頼されていません。
		},
	},
}
resp, err := client.Get(server.URL)
if err != nil {
	log.Fatalf("Failed to get URL: %v", err)
}
resp.Body.Close()

// 生成されたファイルは、Wiresharkで使用することができ、SSLプロトコルの設定で(Pre)-Master-Secretログファイル名を指定することで、TLS接続を復号化できます。
Output:

Example (VerifyConnection)
package main

import (
	"github.com/shogo82148/std/crypto/tls"
	"github.com/shogo82148/std/crypto/x509"
)

func main() {

	// VerifyConnection は、接続の検証を置き換え、カスタマイズするために使用できます。
	// この例では、VerifyConnection の実装方法を示しており、通常 crypto/tls で行われるピアの証明書の検証とほぼ同等です。

	// クライアント側の設定。
	_ = &tls.Config{

		// InsecureSkipVerifyを設定して、デフォルトの検証をスキップします。
		// これによってVerifyConnectionは無効になりません。
		InsecureSkipVerify: true,
		VerifyConnection: func(cs tls.ConnectionState) error {
			opts := x509.VerifyOptions{
				DNSName:       cs.ServerName,
				Intermediates: x509.NewCertPool(),
			}
			for _, cert := range cs.PeerCertificates[1:] {
				opts.Intermediates.AddCert(cert)
			}
			_, err := cs.PeerCertificates[0].Verify(opts)
			return err
		},
	}

	// サーバーサイドの設定。
	_ = &tls.Config{

		// クライアント証明書を要求する(VerifyConnection は引き続き実行され、cs.PeerCertificates[0] にアクセスできなくなるとパニックする)が、デフォルトの検証子で検証しない。これにより VerifyConnection は無効になりません。
		ClientAuth: tls.RequireAnyClientCert,
		VerifyConnection: func(cs tls.ConnectionState) error {
			opts := x509.VerifyOptions{
				DNSName:       cs.ServerName,
				Intermediates: x509.NewCertPool(),
				KeyUsages:     []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth},
			}
			for _, cert := range cs.PeerCertificates[1:] {
				opts.Intermediates.AddCert(cert)
			}
			_, err := cs.PeerCertificates[0].Verify(opts)
			return err
		},
	}

	// デフォルトの検証器で証明書が処理されていない場合、ConnectionState.VerifiedChains は nil になります。
}
Output:

func (*Config) BuildNameToCertificate

func (c *Config) BuildNameToCertificate()

BuildNameToCertificateはc.Certificatesを解析し、各リーフ証明書のCommonNameとSubjectAlternateNameフィールドからc.NameToCertificateを構築します。 廃止されました: NameToCertificateは特定の名前に対して単一の証明書の関連付けしか許可しません。そのフィールドをnilのままにしておき、ライブラリに最初に互換性のあるチェーンを選択させます。

func (*Config) Clone added in v1.8.0

func (c *Config) Clone() *Config

Cloneはcの浅いクローンを返します。cがnilの場合はnilを返します。TLSクライアントやサーバーによって 同時に使用されている Config をクローンすることは安全です。

func (*Config) DecryptTicket added in v1.21.0

func (c *Config) DecryptTicket(identity []byte, cs ConnectionState) (*SessionState, error)

DecryptTicketは[Config.EncryptTicket]によって暗号化されたチケットを復号化します。[Config.UnwrapSession]の実装として使用することができます。

もしチケットを復号化または解析できない場合、DecryptTicketは(nil, nil)を返します。

func (*Config) EncryptTicket added in v1.21.0

func (c *Config) EncryptTicket(cs ConnectionState, ss *SessionState) ([]byte, error)

EncryptTicketは、 Config で設定された(またはデフォルトの)セッションチケットキーを使用してチケットを暗号化します。これは [Config.WrapSession] の実装として使用できます。

func (*Config) SetSessionTicketKeys added in v1.5.0

func (c *Config) SetSessionTicketKeys(keys [][32]byte)

SetSessionTicketKeysはサーバーのセッションチケットのキーを更新します。

新しいチケットを作成する際に最初のキーが使用され、すべてのキーはチケットの解読に使用できます。 セッションチケットのキーをローテーションするために、この関数を実行しても問題ありません(サーバーが実行中である場合)。 関数はキーが空の場合、パニックを発生させます。

この関数を呼び出すと、自動的なセッションチケットキーのローテーションが無効になります。

同じホストに接続を終了する複数のサーバーがある場合、すべてのサーバーは同じセッションチケットのキーを持つ必要があります。 セッションチケットのキーが漏洩した場合、以前に記録されたおよび将来のTLS接続でこれらのキーが使用される可能性があります。 これにより、接続が危険にさらされる可能性があります。

type Conn

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

Connはセキュア接続を表します。 net.Connインターフェースを実装しています。

func Client

func Client(conn net.Conn, config *Config) *Conn

Client は、基礎となるトランスポートとして conn を使用して 新しい TLS クライアント側の接続を返します。 ユーザーは、config に ServerName または InsecureSkipVerify のどちらかを設定する必要があります。config は nil であってはなりません。

func Dial

func Dial(network, addr string, config *Config) (*Conn, error)

Dial関数は、net.Dialを使用して指定されたネットワークアドレスに接続し、 次にTLSハンドシェイクを開始して、結果として得られるTLSコネクションを返します。 Dialはnilのconfigurationをゼロのconfigurationと同等だと解釈します。 デフォルトの設定については、Configのドキュメンテーションを参照してください。

Example
package main

import (
	"github.com/shogo82148/std/crypto/tls"
	"github.com/shogo82148/std/crypto/x509"
)

func main() {
	// カスタムルート証明書セットで接続する。

	const rootPEM = `
-- GlobalSign Root R2, valid until Dec 15, 2021
-----BEGIN CERTIFICATE-----
MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
-----END CERTIFICATE-----`

	// まず、ルート証明書のセットを作成します。この例では、1つしかありません。
	// もしくは、現在のオペレーティングシステムのデフォルトのルートセットを使用するために、これを省略することも可能です。
	roots := x509.NewCertPool()
	ok := roots.AppendCertsFromPEM([]byte(rootPEM))
	if !ok {
		panic("failed to parse root certificate")
	}

	conn, err := tls.Dial("tcp", "mail.google.com:443", &tls.Config{
		RootCAs: roots,
	})
	if err != nil {
		panic("failed to connect: " + err.Error())
	}
	conn.Close()
}
Output:

func DialWithDialer added in v1.3.0

func DialWithDialer(dialer *net.Dialer, network, addr string, config *Config) (*Conn, error)

DialWithDialerは、dialer.Dialを使用して指定されたネットワークアドレスに接続し、 TLSハンドシェイクを開始し、結果のTLS接続を返します。dialerで指定されたタイムアウトや デッドラインは、接続とTLSハンドシェイク全体に適用されます。

DialWithDialerは、nilの設定をゼロの設定として解釈します。 デフォルトの内容については、 Config のドキュメントを参照してください。

DialWithDialerは、内部的にcontext.Backgroundを使用します。 コンテキストを指定するには、NetDialerを必要なダイアラに設定した Dialer.DialContext を使用してください。

func Server

func Server(conn net.Conn, config *Config) *Conn

Serverは、基礎となるトランスポートとしてconnを使用して新しいTLSサーバーサイド接続を返します。 configの設定は、非nilであり、少なくとも1つの証明書を含んでいるか、またはGetCertificateを設定している必要があります。

func (*Conn) Close

func (c *Conn) Close() error

Closeは接続を閉じます。

func (*Conn) CloseWrite added in v1.8.0

func (c *Conn) CloseWrite() error

CloseWriteは接続の書き込み側をシャットダウンします。ハンドシェイクが完了した後に一度だけ呼び出され、基礎となる接続上でCloseWriteを呼び出しません。ほとんどの呼び出し元は単に Conn.Close を使用すべきです。

func (*Conn) ConnectionState

func (c *Conn) ConnectionState() ConnectionState

ConnectionState関数は、接続に関する基本的なTLSの詳細を返します。

func (*Conn) Handshake

func (c *Conn) Handshake() error

Handshakeはクライアントまたはサーバーのハンドシェイクプロトコルを実行します。 まだ実行されていない場合、ほとんどのこのパッケージの使用では、明示的にHandshakeを呼び出す必要はありません:最初の Conn.Read または Conn.Write が自動的に呼び出します。

ハンドシェイクのキャンセルやタイムアウトの設定に関して制御するためには、 Conn.HandshakeContext または Dialer のDialContextメソッドを使用します。

サーバーまたはクライアントが送信する証明書のRSAキーサイズは、拒否サービス攻撃を防ぐために、8192ビットに制限されています。この制限は、GODEBUG環境変数(例:GODEBUG=tlsmaxrsasize=4096)のtlsmaxrsasizeを設定することで上書きすることができます。

func (*Conn) HandshakeContext added in v1.17.0

func (c *Conn) HandshakeContext(ctx context.Context) error

HandshakeContextは、クライアントまたはサーバーのハンドシェイクプロトコルを実行します。 まだ実行されていない場合、提供されたコンテキストはnil以外である必要があります。 ハンドシェイクが完了する前にコンテキストがキャンセルされた場合、ハンドシェイクは中断され、エラーが返されます。 ハンドシェイクが完了すると、コンテキストのキャンセルは接続に影響を与えません。

このパッケージのほとんどの使用では、明示的にHandshakeContextを呼び出す必要はありません:最初の Conn.Read または Conn.Write が自動的に呼び出します。

func (*Conn) LocalAddr

func (c *Conn) LocalAddr() net.Addr

LocalAddrはローカルネットワークアドレスを返します。

func (*Conn) NetConn added in v1.18.0

func (c *Conn) NetConn() net.Conn

NetConnはcによってラップされた基になる接続を返します。 ただし、この接続に直接書き込みまたは読み込みを行うと、TLSセッションが破損することに注意してください。

func (*Conn) OCSPResponse

func (c *Conn) OCSPResponse() []byte

OCSPResponseは、TLSサーバーからステープルされたOCSP応答を返します(クライアント接続の場合のみ有効)。

func (*Conn) Read

func (c *Conn) Read(b []byte) (int, error)

Readは接続からデータを読み込みます。

Conn.Handshake を呼び出すため、ハンドシェイクがまだ完了していない場合、 Readが呼び出される前にReadと Conn.Write の両方にデッドラインを設定する必要があります 無制限のブロッキングを防ぐためです。 Conn.SetDeadlineConn.SetReadDeadline 、および Conn.SetWriteDeadline を参照してください。

func (*Conn) RemoteAddr

func (c *Conn) RemoteAddr() net.Addr

RemoteAddrはリモートネットワークアドレスを返します。

func (*Conn) SetDeadline

func (c *Conn) SetDeadline(t time.Time) error

SetDeadlineは接続に関連付けられた読み込みと書き込みのタイムアウトを設定します。 tのゼロ値は、 Conn.ReadConn.Write がタイムアウトしないことを意味します。 書き込みがタイムアウトした後、TLSの状態が破損し、将来の書き込みは同じエラーを返します。

func (*Conn) SetReadDeadline

func (c *Conn) SetReadDeadline(t time.Time) error

SetReadDeadlineは基礎となる接続の読み込みの期限を設定します。 tのゼロ値は、 Conn.Read がタイムアウトしないことを意味します。

func (*Conn) SetWriteDeadline

func (c *Conn) SetWriteDeadline(t time.Time) error

SetWriteDeadlineは、基礎となる接続に書き込みの期限を設定します。 tのゼロ値は、 Conn.Write がタイムアウトしないことを意味します。 書き込みがタイムアウトした後、TLSの状態が壊れるため、以降の書き込みは同じエラーを返します。

func (*Conn) VerifyHostname

func (c *Conn) VerifyHostname(host string) error

VerifyHostnameは、ホストに接続するためのピア証明書チェーンが有効かどうかを確認します。有効であれば、nilを返します。そうでなければ、問題を説明するエラーを返します。

func (*Conn) Write

func (c *Conn) Write(b []byte) (int, error)

Writeは接続にデータを書き込みます。

Conn.Handshake を呼び出すため、無期限のブロッキングを防ぐために ハンドシェイクが完了していない場合、Writeを呼び出す前に Conn.Read とWriteの両方に期限を設定する必要があります。 Conn.SetDeadlineConn.SetReadDeadline 、および Conn.SetWriteDeadline を参照してください。

type ConnectionState

type ConnectionState struct {
	// Versionは接続で使用されるTLSバージョンです(例:VersionTLS12)。
	Version uint16

	// HandshakeComplete はハンドシェイクが完了している場合に true です。
	HandshakeComplete bool

	// DidResume は、この接続がセッションチケットや類似のメカニズムによって前のセッションから正常に再開された場合に true です。
	DidResume bool

	// CipherSuiteは、接続のためにネゴシエートされた暗号スイートです(例: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256、TLS_AES_128_GCM_SHA256)。
	CipherSuite uint16

	// NegotiatedProtocolはALPNで交渉されたアプリケーションプロトコルです。
	NegotiatedProtocol string

	// NegotiatedProtocolIsMutualは相互のNPN(Next Protocol Negotiation)交渉を示すために使われます。
	//
	// 廃止予定:この値は常にtrueです。
	NegotiatedProtocolIsMutual bool

	// ServerNameはクライアントが送信するServer Name Indication拡張機能の値です。これはサーバーとクライアントの両方で利用できます。
	ServerName string

	// PeerCertificates は、ピアから送信された証明書が解析されたものであり、送信順に格納されています。最初の要素は、接続が検証されるリーフ証明書です。
	//
	// クライアント側では空にすることはできません。サーバー側では、Config.ClientAuth が RequireAnyClientCert または RequireAndVerifyClientCert でない場合、空にすることができます。
	//
	// PeerCertificates およびその内容は変更してはいけません。
	PeerCertificates []*x509.Certificate

	// VerifiedChainsは、最初の要素がPeerCertificates[0]であり、最後の要素がConfig.RootCAs(クライアント側)またはConfig.ClientCAs(サーバー側)からの要素の1つ以上のチェーンのリストです。
	//
	// クライアント側では、Config.InsecureSkipVerifyがfalseの場合に設定されます。サーバー側では、Config.ClientAuthがVerifyClientCertIfGiven(かつピアが証明書を提供した場合)またはRequireAndVerifyClientCertである場合に設定されます。
	//
	// VerifiedChainsおよびその内容は変更しないでください。
	VerifiedChains [][]*x509.Certificate

	// SignedCertificateTimestampsは、もしあれば、ピアからのTLSハンドシェイクによって提供されるリーフ証明書のSCTのリストです。
	SignedCertificateTimestamps [][]byte

	// OCSPResponseは、ピアから提供される、必要に応じてリーフ証明書のステープル化されたオンライン証明書ステータスプロトコル(OCSP)レスポンスです。
	OCSPResponse []byte

	// TLSUniqueには、"tls-unique"チャネルバインディングの値が格納されています(RFC 5929、セクション3を参照)。
	// この値は、TLS 1.3接続や拡張されたマスターシークレット(RFC 7627)をサポートしていない再開接続ではnilになります。
	TLSUnique []byte

	// ECHAccepted indicates if Encrypted Client Hello was offered by the client
	// and accepted by the server. Currently, ECH is supported only on the
	// client side.
	ECHAccepted bool
	// contains filtered or unexported fields
}

ConnectionStateは接続に関する基本的なTLSの詳細を記録します。

func (*ConnectionState) ExportKeyingMaterial added in v1.11.0

func (cs *ConnectionState) ExportKeyingMaterial(label string, context []byte, length int) ([]byte, error)

ExportKeyingMaterialは、RFC 5705で定義されているように、新しいスライスにlengthバイトの エクスポートされた鍵マテリアルを返します。contextがnilの場合、それはシードの一部として使用されません。 接続がConfig.Renegotiationを介して再交渉を許可するように設定されていた場合、または接続がTLS 1.3も Extended Master Secretもサポートしていない場合、この関数はエラーを返します。

Extended Master SecretまたはTLS 1.3なしでの鍵マテリアルのエクスポートは、 セキュリティ上の問題(RFC 5705RFC 7627のセキュリティ考慮事項セクションを参照)により、 Go 1.22で無効化されましたが、GODEBUG設定tlsunsafeekm=1で再度有効化できます。

type CurveID added in v1.3.0

type CurveID uint16

CurveIDは、鍵交換メカニズムのTLS識別子の型です。以下を参照してください。 https://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-8

TLS 1.2では、このレジストリは楕円曲線のみをサポートしていました。TLS 1.3では、 他のグループに拡張され、NamedGroupと改名されました。RFC 8446、セクション 4.2.7を参照してください。その後、ハイブリッド ポスト量子KEMなど、他のメカニズムにも拡張されました。

const (
	CurveP256 CurveID = 23
	CurveP384 CurveID = 24
	CurveP521 CurveID = 25
	X25519    CurveID = 29
)

func (CurveID) String added in v1.15.0

func (i CurveID) String() string

type Dialer added in v1.15.0

type Dialer struct {

	// NetDialerはTLS接続の基礎となるTCP接続に使用するオプションのダイアラです。
	// nilのNetDialerはnet.Dialerのゼロ値と同じです。
	NetDialer *net.Dialer

	// Config は新しい接続に使用するTLSの設定です。
	// nilの設定はゼロと同等であり、デフォルトの設定についてはConfigのドキュメントを参照してください。
	Config *Config
}

Dialerは、設定と基礎となる接続のためのダイアラーを使用してTLS接続をダイアルします。

func (*Dialer) Dial added in v1.15.0

func (d *Dialer) Dial(network, addr string) (net.Conn, error)

Dialは指定されたネットワークアドレスに接続し、TLSハンドシェイクを開始し、結果のTLS接続を返します。

返される Conn は、もし存在する場合は常に *Conn 型です。

内部的にDialはcontext.Backgroundを使用しますが、コンテキストを指定するにはDialContextを使用してください。

func (*Dialer) DialContext added in v1.15.0

func (d *Dialer) DialContext(ctx context.Context, network, addr string) (net.Conn, error)

DialContextは指定されたネットワークアドレスに接続し、TLSハンドシェイクを開始し、結果のTLS接続を返します。 提供されたContextはnil以外である必要があります。接続が完了する前にContextが期限切れになった場合、エラーが返されます。接続成功後、Contextが期限切れになっても接続には影響しません。 返される Conn (あれば)は常に *Conn 型です。

type ECHRejectionError added in v1.23.0

type ECHRejectionError struct {
	RetryConfigList []byte
}

ECHRejectionError is the error type returned when ECH is rejected by a remote server. If the server offered a ECHConfigList to use for retries, the RetryConfigList field will contain this list.

The client may treat an ECHRejectionError with an empty set of RetryConfigs as a secure signal from the server.

func (*ECHRejectionError) Error added in v1.23.0

func (e *ECHRejectionError) Error() string

type QUICConfig added in v1.21.0

type QUICConfig struct {
	TLSConfig *Config

	// EnableSessionEvents may be set to true to enable the
	// [QUICStoreSession] and [QUICResumeSession] events for client connections.
	// When this event is enabled, sessions are not automatically
	// stored in the client session cache.
	// The application should use [QUICConn.StoreSession] to store sessions.
	EnableSessionEvents bool
}

QUICConfigは QUICConn を設定します。

type QUICConn added in v1.21.0

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

QUICConnは、RFC 9001で説明されているように、基礎となるトランスポートとしてQUICの実装を使用する接続を表します。

QUICConnのメソッドは同時に使用することはできません。

func QUICClient added in v1.21.0

func QUICClient(config *QUICConfig) *QUICConn

QUICClientは、QUICTransportを基礎とした新しいTLSクライアント側接続を返します。設定はnilであってはなりません。

設定のMinVersionは、少なくともTLS 1.3である必要があります。

func QUICServer added in v1.21.0

func QUICServer(config *QUICConfig) *QUICConn

QUICServerは、下層トランスポートとしてQUICTransportを使用した新しいTLSサーバーサイド接続を返します。設定はnilにできません。

設定のMinVersionは、少なくともTLS 1.3である必要があります。

func (*QUICConn) Close added in v1.21.0

func (q *QUICConn) Close() error

Closeは接続を閉じ、進行中のハンドシェイクを停止します。

func (*QUICConn) ConnectionState added in v1.21.0

func (q *QUICConn) ConnectionState() ConnectionState

ConnectionStateは接続に関する基本的なTLSの詳細を返します。

func (*QUICConn) HandleData added in v1.21.0

func (q *QUICConn) HandleData(level QUICEncryptionLevel, data []byte) error

HandleDataはピアから受信したハンドシェイクバイトを処理します。 接続イベントを生成することがあり、 QUICConn.NextEvent で読み取ることができます。

func (*QUICConn) NextEvent added in v1.21.0

func (q *QUICConn) NextEvent() QUICEvent

NextEventは接続で発生する次のイベントを返します。 イベントが利用できない場合は、Kindが QUICNoEvent のイベントを返します。

func (*QUICConn) SendSessionTicket added in v1.21.0

func (q *QUICConn) SendSessionTicket(opts QUICSessionTicketOptions) error

SendSessionTicketはクライアントにセッションチケットを送信します。 これにより、接続イベントが生成され、 QUICConn.NextEvent で読み取ることができます。 現在、一度しか呼び出すことはできません。

func (*QUICConn) SetTransportParameters added in v1.21.0

func (q *QUICConn) SetTransportParameters(params []byte)

SetTransportParametersはピアに送信するためのトランスポートパラメータを設定します。

サーバ接続では、クライアントのトランスポートパラメータを受信した後にトランスポートパラメータを設定することができます。 QUICTransportParametersRequired を参照してください。

func (*QUICConn) Start added in v1.21.0

func (q *QUICConn) Start(ctx context.Context) error

Startはクライアントまたはサーバーのハンドシェイクプロトコルを開始します。 接続イベントを生成する場合があり、 QUICConn.NextEvent で読み取ることができます。

Startは1度以上呼び出すことはできません。

func (*QUICConn) StoreSession added in v1.23.0

func (q *QUICConn) StoreSession(session *SessionState) error

StoreSessionは、QUICStoreSessionイベントで以前受け取ったセッションをClientSessionCacheに保存します。 アプリケーションは、セッションを保存する前に追加のイベントを処理したり、SessionStateを変更したりすることができます。

type QUICEncryptionLevel added in v1.21.0

type QUICEncryptionLevel int

QUICEncryptionLevelは、ハンドシェイクメッセージを送信するために使用されるQUIC暗号化レベルを表します。

func (QUICEncryptionLevel) String added in v1.21.0

func (l QUICEncryptionLevel) String() string

type QUICEvent added in v1.21.0

type QUICEvent struct {
	Kind QUICEventKind

	// QUICSetReadSecret、QUICSetWriteSecret、およびQUICWriteDataに対する設定。
	Level QUICEncryptionLevel

	// QUICTransportParameters、QUICSetReadSecret、QUICSetWriteSecret、およびQUICWriteDataに設定します。
	// この内容はcrypto/tlsによって所有され、次のNextEvent呼び出しまで有効です。
	Data []byte

	// QUICSetReadSecretおよびQUICSetWriteSecretに設定します。
	Suite uint16

	// Set for QUICResumeSession and QUICStoreSession.
	SessionState *SessionState
}

QUICEventはQUIC接続で発生するイベントです。

イベントの種類はKindフィールドで指定されます。 他のフィールドの内容は、種別によって異なります。

type QUICEventKind added in v1.21.0

type QUICEventKind int

QUICEventKindはQUIC接続上での操作の種類です。

const (
	// QUICNoEventは利用可能なイベントが存在しないことを示します。
	QUICNoEvent QUICEventKind = iota

	// QUICSetReadSecretとQUICSetWriteSecretは、特定の暗号化レベルの読み取りと書き込みの秘密情報を提供します。
	// QUICEvent.Level、QUICEvent.Data、QUICEvent.Suiteが設定されます。
	//
	// Initial暗号化レベルの秘密情報は、最初の宛先接続IDから派生され、QUICConnによって提供されません。
	QUICSetReadSecret
	QUICSetWriteSecret

	// QUICWriteDataはCRYPTOフレームでピアに送信するデータを提供します。
	// QUICEvent.Dataが設定されています。
	QUICWriteData

	// QUICTransportParametersは相手のQUICトランスポートパラメータを提供します。
	// QUICEvent.Dataが設定されています。
	QUICTransportParameters

	// QUICTransportParametersRequiredは、呼び出し元がピアに送信するためのQUICトランスポートパラメータを提供する必要があることを示します。呼び出し元は、QUICConn.SetTransportParametersを使用してトランスポートパラメータを設定し、QUICConn.NextEventを再度呼び出す必要があります。
	// QUICConn.Startを呼び出す前にトランスポートパラメータが設定されている場合、接続は決してQUICTransportParametersRequiredイベントを生成しません。
	QUICTransportParametersRequired

	// QUICRejectedEarlyDataは、サーバーが私たちが提供したものであっても、0-RTTデータを拒否したことを示しています。これは、QUICEncryptionLevelApplicationのキーが返される前に返されます。
	// このイベントはクライアント接続でのみ発生します。
	QUICRejectedEarlyData

	// QUICHandshakeDone は、TLS ハンドシェイクが完了したことを示します。
	QUICHandshakeDone

	// QUICResumeSessionは、クライアントが以前のセッションを再開しようとしていることを示します。
	// [QUICEvent.SessionState] が設定されます。
	//
	// クライアント接続の場合、このイベントはセッションチケットが選択されたときに発生します。
	// サーバー接続の場合、このイベントはクライアントのセッションチケットを受信したときに発生します。
	//
	// アプリケーションは、セッションがそれをサポートしていても、0-RTTを拒否するために、次の [QUICConn.NextEvent] の呼び出し前に
	// [QUICEvent.SessionState.EarlyData] をfalseに設定することができます。
	QUICResumeSession

	// QUICStoreSessionは、サーバーがセッションを再開するための状態をクライアントに提供したことを示します。
	// [QUICEvent.SessionState] が設定されます。
	// アプリケーションは [QUICConn.StoreSession] セッションを使用して [SessionState] を保存するべきです。
	// アプリケーションは保存する前に [SessionState] を変更することができます。
	// このイベントはクライアント接続でのみ発生します。
	QUICStoreSession
)

type QUICSessionTicketOptions added in v1.21.0

type QUICSessionTicketOptions struct {
	// EarlyDataは0-RTTで使用できるかどうかを指定します。
	EarlyData bool
	Extra     [][]byte
}

type RecordHeaderError added in v1.6.0

type RecordHeaderError struct {
	// Msgはエラーを説明する人が読みやすい文字列を含んでいます。
	Msg string

	// RecordHeaderには、エラーを引き起こしたTLSレコードヘッダの5バイトが含まれています。
	RecordHeader [5]byte

	// Connは、クライアントが初期ハンドシェイクを送信しているが、TLSのように見えない場合の基礎となるnet.Connを提供します。
	// ハンドシェイクが既に行われているか、接続にTLSアラートが書き込まれている場合は、nilです。
	Conn net.Conn
}

RecordHeaderError は、TLS レコードヘッダが無効な場合に返されます。

func (RecordHeaderError) Error added in v1.6.0

func (e RecordHeaderError) Error() string

type RenegotiationSupport added in v1.7.0

type RenegotiationSupport int

RenegotiationSupportは、TLS renegotiationのサポートレベルを列挙しています。TLS renegotiationとは、最初の接続の後に接続で追加のhandshakeを行うことです。これにより、ステートマシンが複雑化し、多くの微妙なセキュリティ上の問題の原因となっています。再交渉の開始はサポートされていませんが、再交渉リクエストの受け入れには対応している場合があります。 有効にされていても、サーバーはハンドシェイク間で自身の識別情報を変更することはできません(つまり、リーフ証明書は同じである必要があります)。また、同時にハンドシェイクとアプリケーションデータのフローを行うことは許可されていないため、再交渉は、再交渉と同期するプロトコル(例:HTTPS)とのみ使用できます。 再交渉はTLS 1.3で定義されていません。

const (
	// RenegotiateNeverは再交渉を無効にします。
	RenegotiateNever RenegotiationSupport = iota

	// RenegotiateOnceAsClientは、リモートサーバーに対して
	// 接続ごとに再交渉を一度だけ要求することを可能にします。
	RenegotiateOnceAsClient

	// RenegotiateFreelyAsClientは、リモートサーバーが繰り返し再交渉を要求できるようにします。
	RenegotiateFreelyAsClient
)

type SessionState added in v1.21.0

type SessionState struct {

	// Extraはcrypto/tlsによって無視されますが、[SessionState.Bytes]によってエンコードされ、[ParseSessionState]によって解析されます。
	//
	// これにより、[Config.UnwrapSession]/[Config.WrapSession]や[ClientSessionCache]の実装が、このセッションとともに追加のデータを格納および取得できるようになります。
	//
	// To allow different layers in a protocol stack to share this field,
	// applications must only append to it, not replace it, and must use entries
	// that can be recognized even if out of order (for example, by starting
	// with an id and version prefix).
	Extra [][]byte

	// EarlyDataは、QUIC接続で0-RTTに使用できるかを示します。
	// サポートされていても、アプリケーションが0-RTTを提供しないことを拒否する場合は、これをfalseに設定することができます。
	EarlyData bool
	// contains filtered or unexported fields
}

SessionStateは再開可能なセッションです。

func ParseSessionState added in v1.21.0

func ParseSessionState(data []byte) (*SessionState, error)

ParseSessionStateは[SessionState.Bytes]でエンコードされた[SessionState]を解析します。

func (*SessionState) Bytes added in v1.21.0

func (s *SessionState) Bytes() ([]byte, error)

Bytesはセッションをエンコードし、[ParseSessionState]によって解析できるようにします。エンコードには、将来のセッションのセキュリティに重要な秘密値が含まれている可能性があります。

具体的なエンコーディングは不透明と見なされ、Goのバージョン間で非互換性がある可能性があります。

type SignatureScheme added in v1.8.0

type SignatureScheme uint16

SignatureSchemeは、TLSでサポートされる署名アルゴリズムを識別します。RFC 8446、セクション4.2.3を参照してください。

const (
	// RSASSA-PKCS1-v1_5 アルゴリズム。
	PKCS1WithSHA256 SignatureScheme = 0x0401
	PKCS1WithSHA384 SignatureScheme = 0x0501
	PKCS1WithSHA512 SignatureScheme = 0x0601

	// 公開キーOID rsaEncryption を使用した RSASSA-PSS アルゴリズム。
	PSSWithSHA256 SignatureScheme = 0x0804
	PSSWithSHA384 SignatureScheme = 0x0805
	PSSWithSHA512 SignatureScheme = 0x0806

	// ECDSAアルゴリズム。TLS 1.3では特定の曲線に制約される。
	ECDSAWithP256AndSHA256 SignatureScheme = 0x0403
	ECDSAWithP384AndSHA384 SignatureScheme = 0x0503
	ECDSAWithP521AndSHA512 SignatureScheme = 0x0603

	// EdDSAアルゴリズム。
	Ed25519 SignatureScheme = 0x0807

	// TLS 1.2用の旧バージョンの署名およびハッシュアルゴリズム。
	PKCS1WithSHA1 SignatureScheme = 0x0201
	ECDSAWithSHA1 SignatureScheme = 0x0203
)

func (SignatureScheme) String added in v1.15.0

func (i SignatureScheme) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL