Je configure un serveur https dans Go en utilisant la fonction suivante. Où key et cert sont des fichiers de clé et de certificat auto-signés respectivement. Mon problème est que pour la sécurité, j'ai besoin de valider la clé auto-signée pour avoir une taille de 2048 bits (ou plus). Comment puis-je vérifier de manière sécurisée et propre dans Go?Comment vérifier la longueur de clé RSA dans Go?
1
A
Répondre
2
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)
}
}
+2
Notez que cela échouera avec n'importe quelle clé ECDSA, car ils utilisent des tailles de clé beaucoup plus petites. – JimB
Quelle est la taille du fichier? – zerkms
@zerkms: cela ne semble pas correct. Et s'il y a des blocs PEM supplémentaires, ou si la clé et le cert sont dans le même fichier? –
Longue histoire courte Je veux obtenir quelque chose de similaire à la sortie de l'exécution "openssl rsa -text -noout -in key.pem" pour lequel la première ligne de la sortie de cette commande est comme ceci "Private-Key: (1024 bit) " – Jorch914