【发布时间】:2023-01-14 03:37:20
【问题描述】:
我正在尝试生成一个 RSA 公私密钥对。公钥将上传到 AWS CloudFront。我找到了一个代码示例 here 并更改了两件事:
- 位大小为
2048。根据 CloudFront 文档,这是预期的位大小。 - 公钥的类型是
PUBLIC KEY。 CloudFront 需要-----BEGIN PUBLIC KEY-----和-----END PUBLIC KEY-----行。
这是最终代码:
package main
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"io/ioutil"
)
func main() {
filename := "key"
bitSize := 2048
// Generate RSA key.
key, err := rsa.GenerateKey(rand.Reader, bitSize)
if err != nil {
panic(err)
}
// Extract public component.
pub := key.Public()
// Encode private key to PKCS#1 ASN.1 PEM.
keyPEM := pem.EncodeToMemory(
&pem.Block{
Type: "RSA PRIVATE KEY",
Bytes: x509.MarshalPKCS1PrivateKey(key),
},
)
// Encode public key to PKCS#1 ASN.1 PEM.
pubPEM := pem.EncodeToMemory(
&pem.Block{
Type: "PUBLIC KEY",
Bytes: x509.MarshalPKCS1PublicKey(pub.(*rsa.PublicKey)),
},
)
// Write private key to file.
if err := ioutil.WriteFile(filename+".rsa", keyPEM, 0700); err != nil {
panic(err)
}
// Write public key to file.
if err := ioutil.WriteFile(filename+".rsa.pub", pubPEM, 0755); err != nil {
panic(err)
}
}
当我将公钥上传到 CloudFront 时,出现以下错误:
您的请求包含空/无效/超出限制的 RSA 编码密钥
此代码需要在 Lambda 中运行并在 SecretsManager 中轮换密钥。在本地,我可以运行
openssl genrsa和openssl rsa命令。 CloudFront 随后将接受公钥。为什么代码生成的公钥不被接受,如何修复代码?
【问题讨论】:
标签: amazon-web-services go aws-lambda amazon-cloudfront aws-secrets-manager