• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    golang简单tls协议用法完整示例

    本文实例讲述了golang简单tls协议用法。分享给大家供大家参考,具体如下:

    生成私钥:

    openssl genrsa -out key.pem 2048
    
    

    生成证书:

    openssl req -new -x509 -key key.pem -out cert.pem -days 3650
    
    

    https:

    复制代码 代码如下:
    package main
    import (
        "io"
        "net/http"
        "log"
    )
    func HelloServer(w http.ResponseWriter, req *http.Request) {
        io.WriteString(w, "hello, world!\n")
    }
    func main() {
        http.HandleFunc("/hello", HelloServer)
        err := http.ListenAndServeTLS(":8080", "cert.pem", "key.pem", nil)
        if err != nil {
            log.Fatal("ListenAndServe: ", err)
        }
    }

    提示: 访问请勿忘记使用https开头,否则chrome会下载一个文件如下:

    dotcoo-air:tls dotcoo$ cat /Users/dotcoo/Downloads/hello | xxd
    0000000: 1503 0100 0202 0a                        .......

    TLS Server:

    复制代码 代码如下:
    package main
    import (
        "log"
        "crypto/tls"
        "net"
        "bufio"
    )
    func main() {
        log.SetFlags(log.Lshortfile)
        cer, err := tls.LoadX509KeyPair("cert.pem", "key.pem")
        if err != nil {
            log.Println(err)
            return
        }
        config := tls.Config{Certificates: []tls.Certificate{cer}}
        ln, err := tls.Listen("tcp", ":8000", config)
        if err != nil {
            log.Println(err)
            return
        }
        defer ln.Close()
        for {
            conn, err := ln.Accept()
            if err != nil {
                log.Println(err)
                continue
            }
            go handleConnection(conn)
        }
    }
    func handleConnection(conn net.Conn) {
        defer conn.Close()
        r := bufio.NewReader(conn)
        for {
            msg, err := r.ReadString('\n')
            if err != nil {
                log.Println(err)
                return
            }
            println(msg)
            n, err := conn.Write([]byte("world\n"))
            if err != nil {
                log.Println(n, err)
                return
            }
        }
    }

    TLS Client:

    复制代码 代码如下:
    package main
    import (
        "log"
        "crypto/tls"
    )
    func main() {
        log.SetFlags(log.Lshortfile)
        conf := tls.Config{
            InsecureSkipVerify: true,
        }
        conn, err := tls.Dial("tcp", "127.0.0.1:8000", conf)
        if err != nil {
            log.Println(err)
            return
        }
        defer conn.Close()
        n, err := conn.Write([]byte("hello\n"))
        if err != nil {
            log.Println(n, err)
            return
        }
        buf := make([]byte, 100)
        n, err = conn.Read(buf)
        if err != nil {
            log.Println(n, err)
            return
        }
        println(string(buf[:n]))
    }

    希望本文所述对大家Go语言程序设计有所帮助。

    您可能感兴趣的文章:
    • golang gorm 操作mysql及gorm基本用法
    • golang守护进程用法示例
    • Golang的循环中break和continue语句的用法讲解
    • golang中的三个点 ''...''的用法示例详解
    上一篇:golang网络socket粘包问题的解决方法
    下一篇:golang的HTTP基本认证机制实例详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    golang简单tls协议用法完整示例 golang,简单,tls,协议,用法,