Golang中的SSL Socket客户端

时间:2016-11-22 16:17:16

标签: sockets ssl go

我尝试使用ssl证书通过套接字连接到服务器。我有私钥和连接到服务器所需的证书,我已经四处寻找帮助我在Go中编写此代码的东西,但我没有发现任何有用的东西。这是我到目前为止写的代码,但它似乎没有让我到任何地方,它似乎是在获取实际数据之前发送数据(tls.dial),这迫使服务器回复一些加密数据,我是无法检查。

func main() {
    cert, err := tls.LoadX509KeyPair("cert.pem", "key.pem")
    if err != nil {
        log.Fatalf("server: loadkeys: %s", err)
    }
    config := tls.Config{Certificates: []tls.Certificate{cert}, InsecureSkipVerify: true}
    conn, err := tls.Dial("tcp", "1.2.3.4:1234", &config)
    if err != nil {
        log.Fatalf("client: dial: %s", err)
    }
    defer conn.Close()
    log.Println("client: connected to: ", conn.RemoteAddr())

    state := conn.ConnectionState()
    for _, v := range state.PeerCertificates {
        fmt.Println(x509.MarshalPKIXPublicKey(v.PublicKey))
        fmt.Println(v.Subject)
    }
    log.Println("client: handshake: ", state.HandshakeComplete)
    log.Println("client: mutual: ", state.NegotiatedProtocolIsMutual)

    message := "data"
    n, err := io.WriteString(conn, message)
    if err != nil {
        log.Fatalf("client: write: %s", err)
    }
    log.Printf("client: wrote %q (%d bytes)", message, n)

    reply := make([]byte, 256)
    n, err = conn.Read(reply)
    log.Printf("client: read %q (%d bytes)", string(reply[:n]), n)
    log.Print("client: exiting")
}

0 个答案:

没有答案