为了账号安全,请及时绑定邮箱和手机立即绑定

带有自签名证书的 TLS

带有自签名证书的 TLS

Go
杨魅力 2021-07-29 06:11:12
我正在尝试使用自签名服务器证书建立 TLS 连接。我用这个示例代码生成了证书:http : //golang.org/src/pkg/crypto/tls/generate_cert.go我的相关客户端代码如下所示:// server cert is self signed -> server_cert == ca_certCA_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 certificatecannot sign this kind of certificate" while trying to verify candidate authority certificate "serial:0")我的错误是什么?
查看完整描述

3 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

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


查看完整回答
反对 回复 2021-08-02
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

问题是您需要在服务器端配置中使用CA证书,并且此 CA 必须已签署服务器的证书。

我写了一些 Go 代码来生成CA 证书,但它没有经过任何人的审查,主要是玩客户端证书的玩具。最安全的选择可能是用于openssl ca生成和签署证书。基本步骤将是:

  1. 生成 CA 证书

  2. 生成服务器密钥

  3. 使用 CA 证书签署服务器密钥

  4. 将 CA 证书添加到客户端的 tls.Config RootCAs

  5. tls.Config使用服务器密钥和签名证书设置服务器。


查看完整回答
反对 回复 2021-08-02
  • 3 回答
  • 0 关注
  • 330 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信