登录
首页 >  Golang >  Go问答

带有自签名证书的 TLS

来源:Golang技术栈

时间:2023-04-30 10:53:41 210浏览 收藏

有志者,事竟成!如果你在学习Golang,那么本文《带有自签名证书的 TLS》,就很适合你!文章讲解的知识点主要包括golang,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我正在尝试使用自签名服务器证书建立 TLS 连接。

我用这个示例代码生成了证书:http: //golang.org/src/pkg/crypto/tls/generate_cert.go

我的相关客户端代码如下所示:

// server cert is self signed -> server_cert == ca_cert
CA_Pool := x509.NewCertPool()
severCert, err := ioutil.ReadFile("./cert.pem")
if err != nil {
    log.Fatal("Could not load server certificate!")
}
CA_Pool.AppendCertsFromPEM(severCert)

config := tls.Config{RootCAs: CA_Pool}

conn, err := tls.Dial("tcp", "127.0.0.1:8000", &config)
if err != nil {
    log.Fatalf("client: dial: %s", err)
}

相关的服务器代码是这样的:

cert, err := tls.LoadX509KeyPair("./cert.pem", "./key.pem")
config := tls.Config{Certificates: []tls.Certificate{cert}}
listener, err := tls.Listen("tcp", "127.0.0.1:8000", &config)

for {
    conn, err := listener.Accept()
    if err != nil {
        log.Printf("server: accept: %s", err)
        break
    }
    log.Printf("server: accepted from %s", conn.RemoteAddr())
    go handleConnection(conn)
}

因为服务器证书是自签名的,所以对服务器和客户端 CA_Pool 使用相同的证书,但这似乎不起作用,因为我总是收到此错误:

client: dial: x509: certificate signed by unknown authority 
(possibly because of "x509: invalid signature: parent certificate
cannot sign this kind of certificate" while trying to verify 
candidate authority certificate "serial:0")

我的错误是什么?

正确答案

它最终与内置于 x509.CreateCertificate 的 go 一起工作,问题是 我没有设置 IsCA:true 标志我只设置了 x509.KeyUsageCertSign ,这使得创建自签名证书工作,但在验证证书链时崩溃。

文中关于golang的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《带有自签名证书的 TLS》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>