import "crypto/tls"

このパッケージは、RFC 4346として定義されているTLS 1.1プロトコルの一部を実装しています。

パッケージファイル

alert.go ca_set.go common.go conn.go handshake_client.go handshake_messages.go handshake_server.go prf.go tls.go

定数

TLS(Transport Layer Security)暗号プログラム。

const (
    TLS_RSA_WITH_RC4_128_SHA uint16 = 5
)

CASet型

CASetは証明書のセットです。

type CASet struct {
    // contains unexported fields
}

NewCASet関数

func NewCASet() *CASet

NewCASetは、新しい空のCASetを返します。

(*CASet) AddCert関数

func (s *CASet) AddCert(cert *x509.Certificate)

AddCert は、証明書セットに証明書を追加します。

(*CASet) FindVerifiedParent関数

func (s *CASet) FindVerifiedParent(cert *x509.Certificate) (parent *x509.Certificate)

FindVerifiedParent は、与えた証明書によって署名されている証明書をsの中から検索します。該当する親証明書が存在しないか、署名が一致しないときはnilを返します。

(*CASet) SetFromPEM関数

func (s *CASet) SetFromPEM(pemCerts []byte) (ok bool)

SetFromPEMは、PEMエンコードされたルート証明書の一連の解析を行います。全証明書の解析に成功したときは、見つけた全証明書をsに追加したのちtrueを返します。多くのLinuxシステム上の/etc/ssl/cert.pemには、システムワイドなルートCAの情報がこの関数に適したフォーマットで含まれています。

Certificate型

Certificateは、ひとつ以上の証明書のチェーンです。証明書チェーンの最後尾が先頭です。

type Certificate struct {
    Certificate [][]byte
    PrivateKey  *rsa.PrivateKey
}

LoadX509KeyPair関数

func LoadX509KeyPair(certFile string, keyFile string) (cert Certificate, err os.Error)

LoadX509KeyPairは、ペアとなったファイルから、ペアとなる公開鍵/秘密鍵を読み込み、解析します。ファイルにはPEMエンコードされたデータが格納されていなければなりません。

Config型

Confing構造体は、TLSクライアントまたはサーバーを設定するのに用いられます。TLS関数に受渡した後は、値を変更してはいけません。

type Config struct {
    // Randは、エントロピーのソースとして、noncesとRSA blindingに使用されます。
    // Randがnilのとき、TLSはcrypto/randパッケージの暗号ランダムReaderを
    // 使用します。
    Rand io.Reader

    // Timeは、カレントの時間をエポック秒で返します。
    // Timeがnilのとき、TLSはsystemのtime.Secondsを使用します。
    Time func() int64

    // Certificateは、接続の相手側に提供するための、ひとつ以上の証明書が格納された
    // 証明書チェーンです。
    // Serverは、少なくとも一つ証明書が格納されるように設定しなければなりません。
    Certificates []Certificate

    // RootCAsは、クライアントがサーバ証明書の確認に使用する、
    // ルート認証局セットの定義です。
    // RootCAsがnilのとき、TLSはホストのroot CAセットを使用します。
    RootCAs *CASet

    // NextProtosは、サポートしているアプリケーションレベルのプロトコルリストです。
    // 今のところ、サーバ側におけるハンドリングのみサポートしています。
    NextProtos []string

    // ServerNameは、仮想ホストをサポートするため、クライアントのハンドシェークに
    // インクルードされています。
    ServerName string

    // AuthenticateClientは、サーバがクライアントに証明書を
    // 要求するかどうかを制御します。これはクライアントが証明書を
    // 送信することを義務づけませんし、送られた証明書が自己署名
    // 証明書でないことも義務付けません。
    AuthenticateClient bool
}

Conn型

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

type Conn struct {
    // contains unexported fields
}

Client関数

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

Clientは、conn内のトランスポートを使用した、新しいTLSクライアント側接続を返します。Clientは、configをnilとしたときは、Configのゼロ値として解釈します。Configのデフォルトについては、Configのドキュメントを参照ください。

Dial関数

func Dial(network, laddr, raddr string, config *Config) (*Conn, os.Error)

Dialは、net.Dialを使用して指定されたネットワークアドレスに接続し、TLSハンドシェークを開始し、その結果であるTLS接続を返します。Dialは、configをnilとしたときは、Configのゼロ値として解釈します。Configのデフォルトについては、Configのドキュメントを参照ください。

Server関数

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

Serverは、conn内のトランスポートを使用した、新しいTLSサーバ側接続を返します。設定configは、nilであってはならず、ひとつ以上の証明書が含まれていなければなりません。

(*Conn) Close関数

func (c *Conn) Close() os.Error

(*Conn) ConnectionState関数

func (c *Conn) ConnectionState() ConnectionState

ConnectionStateは、接続に関するbasic TLS の詳細を返します。

(*Conn) Handshake関数

func (c *Conn) Handshake() os.Error

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

(*Conn) LocalAddr関数

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

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

(*Conn) OCSPResponse関数

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

OCSPResponseは、可能であれば、TLSサーバからのStapled OCSPレスポンスを返します。(クライアント接続でのみ有効)

(*Conn) PeerCertificates関数

func (c *Conn) PeerCertificates() []*x509.Certificate

PeerCertificatesは、相手から提示された証明書チェーンを返します。

(*Conn) Read関数

func (c *Conn) Read(b []byte) (n int, err os.Error)

Readは、一定時間経過したときにタイムアウトとなり、err == os.EAGAINを返します。SetTimeoutとSetReadTimeoutを参照ください。

(*Conn) RemoteAddr関数

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

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

(*Conn) SetReadTimeout関数

func (c *Conn) SetReadTimeout(nsec int64) os.Error

SetReadTimeoutは、Readがos.EAGAINを返すまでのデータを待つ時間(ナノ秒)を設定します。nsecに0(デフォルト)を設定すると期限が無効になります。

(*Conn) SetTimeout関数

func (c *Conn) SetTimeout(nsec int64) os.Error

SetTimeoutは、接続の読み込み期限を設定します。書き込み期限はありません。

(*Conn) SetWriteTimeout関数

func (c *Conn) SetWriteTimeout(nsec int64) os.Error

SetWriteTimeoutは、net.Connインタフェースを満たすために存在しますが、TLSには実装されていません。この関数は常にエラーを返します。

(*Conn) VerifyHostname関数

func (c *Conn) VerifyHostname(host string) os.Error

VerifyHostnameは、ホストに接続するにあたり、peer証明書チェーンが有効かをチェックします。有効であれば、nilを返しますが、無効のときは、無効となった理由を格納したos.Errorを返します。

(*Conn) Write関数

func (c *Conn) Write(b []byte) (n int, err os.Error)

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

ConnectionState型

ConnectionStateには、接続に関するbasic TLS の詳細を記録します。

type ConnectionState struct {
    HandshakeComplete  bool
    CipherSuite        uint16
    NegotiatedProtocol string
}

Listener型

Listenerは、TLS接続用のネットワークリスナ(net.Listener)を実装しています。

type Listener struct {
    // contains unexported fields
}

Listen関数

func Listen(network, laddr string, config *Config) (*Listener, os.Error)

Listenは、指定したネットワークアドレスでnet.Listenを使用してTLSリスナを作成します。設定configは、nilであってはならず、ひとつ以上の証明書が含まれていなければなりません。

NewListener関数

func NewListener(listener net.Listener, config *Config) (l *Listener)

NewListenerは、内部のリスナから接続を受け付けるためのリスナを作成し、サーバとの各接続をラップします。設定configは、nilであってはならず、ひとつ以上の証明書が含まれていなければなりません。

(*Listener) Accept関数

func (l *Listener) Accept() (c net.Conn, err os.Error)

Acceptは、次のTLS接続要求を待って、それを返します。返される接続cは、 *tls.Connです。

(*Listener) Addr関数

func (l *Listener) Addr() net.Addr

Addrは、リスナのネットワークアドレスを返します。

(*Listener) Close関数

func (l *Listener) Close() os.Error

Closeは、リスナをクローズします。

仮想ホストをサポートするため、クライアントのハンドシェークにインクルードされている