首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Go中验证RSA密钥长度?

如何在Go中验证RSA密钥长度?
EN

Stack Overflow用户
提问于 2017-03-10 07:16:26
回答 1查看 1.7K关注 0票数 2

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

代码语言:javascript
复制
err := http.ListenAndServeTLS(":8080", key, cert, nil)
if err != nil {
    log.Fatal("error...")
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-10 20:13:16

代码语言:javascript
复制
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)
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42707353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档