欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang簡單tls協(xié)議用法完整示例

 更新時間:2016年07月22日 10:07:26   作者:dotcoo  
這篇文章主要介紹了golang簡單tls用法,分析了tls協(xié)議的使用步驟及客戶端與服務(wù)器端的相關(guān)實現(xiàn)代碼,需要的朋友可以參考下

本文實例講述了golang簡單tls協(xié)議用法。分享給大家供大家參考,具體如下:

生成私鑰:

openssl genrsa -out key.pem 2048

生成證書:

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

https:

復(fù)制代碼 代碼如下:
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:

復(fù)制代碼 代碼如下:
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:

復(fù)制代碼 代碼如下:
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語言程序設(shè)計有所幫助。

相關(guān)文章

  • Go框架自動化工具Beego使用詳解

    Go框架自動化工具Beego使用詳解

    這篇文章主要為大家介紹了Go框架自動化工具Beego使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • golang連接MongoDB數(shù)據(jù)庫及數(shù)據(jù)庫操作指南

    golang連接MongoDB數(shù)據(jù)庫及數(shù)據(jù)庫操作指南

    MongoDB是Nosql中常用的一種數(shù)據(jù)庫,下面這篇文章主要給大家介紹了關(guān)于golang連接MongoDB數(shù)據(jù)庫及數(shù)據(jù)庫操作的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • 一文詳解Go語言io.LimitedReader類型

    一文詳解Go語言io.LimitedReader類型

    這篇文章主要為大家介紹了Go語言io.LimitedReader類型示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 通過函數(shù)如何將golang?float64?保留2位小數(shù)(方法匯總)

    通過函數(shù)如何將golang?float64?保留2位小數(shù)(方法匯總)

    這篇文章主要介紹了通過函數(shù)將golang?float64保留2位小數(shù),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Go語言的隊列和堆棧實現(xiàn)方法

    Go語言的隊列和堆棧實現(xiàn)方法

    這篇文章主要介紹了Go語言的隊列和堆棧實現(xiàn)方法,涉及container/list包的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • 深入理解gorm如何和數(shù)據(jù)庫建立連接

    深入理解gorm如何和數(shù)據(jù)庫建立連接

    這篇文章主要為大家詳細(xì)介紹了gorm如何和數(shù)據(jù)庫建立連接,文中的示例代碼講解詳細(xì),對我們深入了解GO語言有一定的幫助,需要的小伙伴可以參考下
    2023-11-11
  • OpenTelemetry-go的SDK使用方法詳解

    OpenTelemetry-go的SDK使用方法詳解

    這篇文章主要介紹了OpenTelemetry-go的SDK使用方法,OpenTelemetry幫我們實現(xiàn)了相應(yīng)語言的SDK,所以我們只需要進(jìn)行調(diào)用即可,本文根據(jù)官方文檔實例講解,需要的朋友可以參考下
    2022-09-09
  • 如何在VScode 中編譯多個Go文件

    如何在VScode 中編譯多個Go文件

    這篇文章主要介紹了VScode 中編譯多個Go文件的實現(xiàn)方法,本文通過實例圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08
  • golang 將[]byte轉(zhuǎn)成16進(jìn)制的實現(xiàn)

    golang 將[]byte轉(zhuǎn)成16進(jìn)制的實現(xiàn)

    這篇文章主要介紹了golang 將[]byte轉(zhuǎn)成16進(jìn)制的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • 淺析golang?github.com/spf13/cast?庫識別不了自定義數(shù)據(jù)類型

    淺析golang?github.com/spf13/cast?庫識別不了自定義數(shù)據(jù)類型

    這篇文章主要介紹了golang?github.com/spf13/cast庫識別不了自定義數(shù)據(jù)類型,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08

最新評論