gpt4 book ai didi

go - 如何在 Go 中验证 RSA key 长度?

转载 作者:IT王子 更新时间:2023-10-29 01:38:46 26 4
gpt4 key购买 nike

我正在使用以下函数在 Go 中设置一个 https 服务器。

err := http.ListenAndServeTLS(":8080", key, cert, nil)
if err != nil {
log.Fatal("error...")
}

其中key和cert分别是自签名的 key 和证书文件。我的问题是,为了安全起见,我需要验证它们的自签名 key 是否具有 2048 位大小(或更多)。我如何在 Go 中安全、干净地检查这个?

最佳答案

package main

import (
"crypto/ecdsa"
"crypto/rsa"
"crypto/tls"
"log"
"net/http"
)

func main() {
certFile := "/tmp/cert.pem"
keyFile := "/tmp/key.pem"

cert, err := tls.LoadX509KeyPair(certFile, keyFile)
if err != nil {
log.Fatal(err)
}

var bitLen int
switch privKey := cert.PrivateKey.(type) {
case *rsa.PrivateKey:
bitLen = privKey.N.BitLen()
case *ecdsa.PrivateKey:
bitLen = privKey.Curve.Params().BitSize
default:
log.Fatal("unsupported private key")
}

if bitLen < 2048 {
log.Fatalf("private key length is too small (size: %d)\n", bitLen)
}

tlsConfig := tls.Config{
Certificates: []tls.Certificate{cert},
}

server := http.Server{
Addr: ":8080",
TLSConfig: &tlsConfig,
}
if err := server.ListenAndServeTLS("", ""); err != nil {
log.Fatal(err)
}
}

关于go - 如何在 Go 中验证 RSA key 长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42707353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com