温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何在golang中使用tls协议

发布时间:2021-04-14 17:44:17 来源:亿速云 阅读:515 作者:Leah 栏目:编程语言

这篇文章将为大家详细讲解有关如何在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 mainimport (    "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 mainimport (    "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]))}

关于如何在golang中使用tls协议就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI