Products

中文

中文

  • Pipy 文档
  • Introduction
    • 概述
    • 概念
  • Getting Started
    • 构建和安装
    • 快速入门
    • 获取帮助
  • Release
    • 发布历史
      • 0.10.0-1
      • 0.22.0-31
      • 0.30.0
      • 0.50.0
  • Tutorial
    • 01 你好
    • 02 回显
    • 03 代理
    • 04 路由
    • 05 负载均衡
    • 06 配置
    • 07 插件
  • Operating
    • 开发控制台
    • CLI
    • Pipy Repo
      • 介绍
      • 快速开始
      • 演示
      • REST API
  • Reference
    • API
      • Configuration
        • acceptHTTPTunnel()
        • acceptProxyProtocol()
        • acceptSOCKS()
        • acceptTLS()
        • admin()
        • branch()
        • branchMessage()
        • branchMessageStart()
        • chain()
        • compress()
        • compressHTTP()
        • connect()
        • connectHTTPTunnel()
        • connectProxyProtocol()
        • connectSOCKS()
        • connectTLS()
        • decodeBGP()
        • decodeDubbo()
        • decodeHTTPRequest()
        • decodeHTTPResponse()
        • decodeMQTT()
        • decodeMultipart()
        • decodeRESP()
        • decodeThrift()
        • decodeWebSocket()
        • decompress()
        • decompressHTTP()
        • deframe()
        • demux()
        • demuxHTTP()
        • detectProtocol()
        • dummy()
        • dump()
        • encodeBGP()
        • encodeDubbo()
        • encodeHTTPRequest()
        • encodeHTTPResponse()
        • encodeMQTT()
        • encodeRESP()
        • encodeThrift()
        • encodeWebSocket()
        • exec()
        • exit()
        • export()
        • fork()
        • handleData()
        • handleMessage()
        • handleMessageBody()
        • handleMessageEnd()
        • handleMessageStart()
        • handleStreamEnd()
        • handleStreamStart()
        • handleTLSClientHello()
        • import()
        • insert()
        • link()
        • listen()
        • loop()
        • mux()
        • muxHTTP()
        • onEnd()
        • onStart()
        • pack()
        • pipeline()
        • print()
        • read()
        • repeat()
        • replaceData()
        • replaceMessage()
        • replaceMessageBody()
        • replaceMessageEnd()
        • replaceMessageStart()
        • replaceStreamEnd()
        • replaceStreamStart()
        • replay()
        • serveHTTP()
        • split()
        • task()
        • tee()
        • throttleConcurrency()
        • throttleDataRate()
        • throttleMessageRate()
        • to()
        • use()
        • wait()
        • watch()
      • Data
        • from()
        • Data()
        • push()
        • shift()
        • shiftTo()
        • shiftWhile()
        • size
        • toArray()
      • Hessian
        • decode()
        • encode()
      • JSON
        • decode()
        • encode()
        • parse()
        • stringify()
      • Message
        • body
        • head
        • Message()
        • tail
      • MessageEnd
        • MessageEnd()
        • payload
        • tail
      • MessageStart
        • head
        • MessageStart()
      • Netmask
        • base
        • bitmask
        • broadcast
        • contains()
        • decompose()
        • first
        • hostmask
        • ip
        • last
        • mask
        • Netmask()
        • next()
        • size
        • version
      • StreamEnd
        • error
        • StreamEnd()
      • URL
        • auth
        • hash
        • host
        • hostname
        • href
        • URL()
        • origin
        • password
        • path
        • pathname
        • port
        • protocol
        • query
        • search
        • searchParams
        • username
      • URLSearchParams
        • get()
        • getAll()
        • URLSearchParams()
        • set()
        • toObject()
      • XML
        • Node
          • attributes
          • children
          • name
          • Node()
        • decode()
        • encode()
        • parse()
        • stringify()
      • algo
        • Cache
          • clear()
          • get()
          • Cache()
          • remove()
          • set()
        • HashingLoadBalancer
          • add()
          • HashingLoadBalancer()
          • next()
        • LeastWorkLoadBalancer
          • LeastWorkLoadBalancer()
          • next()
          • set()
        • LoadBalancer
          • allocate()
          • LoadBalancer()
          • provision()
          • schedule()
        • LoadBalancerResource
          • free()
          • target
        • Quota
          • consume()
          • current
          • initial
          • Quota()
          • produce()
          • reset()
        • RoundRobinLoadBalancer
          • RoundRobinLoadBalancer()
          • next()
          • set()
        • URLRouter
          • add()
          • find()
          • URLRouter()
        • hash()
        • uuid()
      • console
        • debug()
        • error()
        • info()
        • log()
        • warn()
      • crypto
        • Certificate
          • issuer
          • Certificate()
          • subject
          • subjectAltNames
        • CertificateChain
          • CertificateChain()
        • Cipher
          • final()
          • Cipher()
          • update()
        • Decipher
          • final()
          • Decipher()
          • update()
        • Hash
          • digest()
          • Hash()
          • update()
        • Hmac
          • digest()
          • Hmac()
          • update()
        • JWK
          • isValid
          • JWK()
        • JWT
          • header
          • isValid
          • JWT()
          • payload
          • verify()
        • PrivateKey
          • PrivateKey()
        • PublicKey
          • PublicKey()
        • Sign
          • Sign()
          • sign()
          • update()
        • Verify
          • Verify()
          • update()
          • verify()
      • http
        • Agent
          • new()
          • request()
        • Directory
          • new()
          • serve()
      • logging
        • BinaryLogger
          • log()
          • BinaryLogger()
          • toFile()
          • toHTTP()
          • toStderr()
          • toStdout()
          • toSyslog()
        • JSONLogger
          • log()
          • JSONLogger()
          • toFile()
          • toHTTP()
          • toStderr()
          • toStdout()
          • toSyslog()
        • TextLogger
          • log()
          • TextLogger()
          • toFile()
          • toHTTP()
          • toStderr()
          • toStdout()
          • toSyslog()
      • os
        • env
        • readDir()
        • readFile()
        • stat()
        • unlink()
        • writeFile()
      • pipy()
        • exit()
        • load()
        • restart()
        • solve()
      • stats
        • Counter
          • decrease()
          • increase()
          • Counter()
          • withLabels()
          • zero()
        • Gauge
          • decrease()
          • increase()
          • Gauge()
          • set()
          • withLabels()
          • zero()
        • Histogram
          • Histogram()
          • observe()
          • withLabels()
          • zero()

    Configuration.connectTLS()

    Description

    Appends a connectTLS filter to the current pipeline layout.

    A connectTLS filter implements TLS protocol on the client side.

    • INPUT - Data stream to send to the server via TLS.
    • OUTPUT - Data stream received from the server via TLS.
    • SUB-INPUT - TLS-encrypted Data stream to send to the server.
    • SUB-OUTPUT - TLS-encrypted Data stream received from the server.
    connectTLSDataDataSub-pipelineDataData

    A connectTLS filter does the following:

    • First, it initiates and carries out a TLS handshake with the server via a newly created sub-pipeline
    • After the handshake is done, it goes on reading and encrypting Data stream from the filter's input and pumping the encrypted Data stream to the sub-pipeline
    • The sub-pipeline's output, which is encrypted Data stream received from the server, is decrypted before coming out from the filter's output

    SNI

    As the client side in a TLS communication, you can specify the SNI server name by option sni in the options parameter. It can be a string or a function that returns a string.

    ALPN

    ALPN is supported by specifying protocols the client side prefers in alpn option of the options parameter. It can be a string or an array of strings.

    Mutual TLS

    To enable mTLS, give an array of crypto.Certificate objects to the trusted option in the options parameter. Only servers holding a certificate presented in that list are allowed in the handshake process.

    The certificate option in the options parameter is also required on the client side if mutual TLS is being used. It can be an object with the following properties, or a function that returns that object:

    Handshake callback

    A handshake callback function can be given to the handshake option in the options parameter. This function will be called after handshake completes. The protocol that is chosen after protocol negotiation is passed as a string parameter to the callback.

    Syntax

    pipy()
    .pipeline()
    .connectTLS().to(
    subPipelineLayout
    )
    pipy()
    .pipeline('example')
    .connectTLS({
    certificate: {
    cert, // crypto.Certificate or crypto.CertificateChain
    key, // crypto.PrivateKey
    },
    trusted: [
    ...trustedCerts // array of crypto.Certificate
    ],
    verify: (ok, cert) => onVerifyPeerCertificate(cert),
    sni: () => getServerName(),
    alpn: [...requestedProtocols],
    handshake: (chosenProtocol) => onHandshakeComplete(chosenProtocol),
    })

    Parameters

    connectTLS(options?)

    options?

    Options including:

    • certificate - (optional) An object containing cert and key or a function that returns such an object. In both cases, cert can be a crypto.Certificate or a crypto.CertificateChain and _key must be a crypto.PrivateKey.
    • trusted - (optional) An array of crypto.Certificate objects for allowed server certificates
    • verify - (optional) A callback function that gets called for each certificate in the peer's certificate chain. It receives 2 arguments: ok and cert, where ok is a boolean indicating whether pre-verification is fine, and cert is the Certificate object being verified. It is expected to return true if verification should go on, or false if the TLS connection should be rejected.
    • sni - (optional) SNI server name or a function that returns it
    • alpn - (optional) Requested protocol name or an array of preferred protocol names
    • handshake - (optional) A callback function that receives the negotiated protocol name after handshake.
    Return Value

    The same Configuration object.

    Example

    pipy()
    // Start a one-shot task
    .task()
    // Throw together a simple HTTP request: GET /hello
    .onStart(
    () => new Message(
    {
    method: 'GET',
    path: '/hello',
    headers: {
    host: 'example.com:443',
    },
    }
    )
    )
    .muxHTTP().to(
    $=>$.connectTLS().to(
    $=>$.connect('example.com:443') // Connect to the target with TCP
    )
    )
    .print() // Print out the response as plain text

    See Also


    © 2024, Flomesh Team.       ICP备案/许可证号:辽ICP备2023014827号