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

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

当连接建立并准备好订阅时,返回的Futurecompleted与RawSecureSocket

使用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是可选的协议列表(按优先级递减),在启动 ASN 协议协商期间用作与服务器进行协商。示例值是 "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);
  });
}