connect 静态方法

Future<RawSecureSocket> connect(
  1. dynamic host,
  2. int port, {
  3. SecurityContext? context,
  4. bool onBadCertificate(
    1. X509Certificate certificate
    )?,
  5. void keyLog(
    1. String line
    )?,
  6. List<String>? supportedProtocols,
  7. Duration? timeout,
})
override

构建一个新的安全客户端套接字,并将其连接到指定的主机和端口。

返回的 Future 在连接成功并准备好订阅时完成。

服务器提供的证书将使用 SecurityContext 对象中设置的受信任证书集进行检查。如果客户端设置了证书和密钥,使用 SecurityContext.useCertificateChainSecurityContext.usePrivateKey,并且服务器请求客户端证书,则该客户端证书将发送到服务器。

onBadCertificate 是一个用于不可验证证书的可选处理程序。处理程序将接收到 X509Certificate,可以检查它并决定(或让用户决定)是否接受连接。处理程序应返回 true 以继续 RawSecureSocket 连接。

onBadCertificate 是一个用于不可验证证书的可选处理程序。处理程序将接收到 X509Certificate,可以检查它并决定(或让用户决定)是否接受连接。处理程序应返回 true 以继续 SecureSocket 连接。

keyLog 是一个可选的回调,当与服务器交换新的 TLS 密钥时将被调用。对于每次调用,keyLog 将接收 NSS Key Log Format 格式的一行文本。将这些行写入文件将允许工具(例如 Wireshark)解密通过此套接字发送的内容。这旨在允许对安全套接字进行网络级调试,不应在生产代码中使用。例如

final log = File('keylog.txt');
final socket = await SecureSocket.connect('www.example.com', 443,
    keyLog: (line) => log.writeAsStringSync(line, mode: FileMode.append));

supportedProtocols 是一个可选的协议列表(按优先级递减顺序),用于与服务器进行 ALPN 协议协商。示例值是 "http/1.1" 或 "h2"。所选协议可以通过 RawSecureSocket.selectedProtocol 获取。

实现

static Future<RawSecureSocket> connect(host, int port,
    {SecurityContext? context,
    bool onBadCertificate(X509Certificate certificate)?,
    void keyLog(String line)?,
    List<String>? supportedProtocols,
    Duration? timeout}) {
  _RawSecureSocket._verifyFields(host, port, false, false);
  return RawSocket.connect(host, port, timeout: timeout).then((socket) {
    return secure(socket,
        context: context,
        onBadCertificate: onBadCertificate,
        keyLog: keyLog,
        supportedProtocols: supportedProtocols);
  });
}