我使用 Puttygen 创建了一个公钥/私钥 RSA 密钥对。我将以下记录添加到 dns,但 dkim 失败。我的公钥似乎存在一些问题。我使用https://dkimcore.org/c/keycheck并发现它无效。
v=DKIM1; k=rsa; h=sha256; p=AAAAB3NzaC1yc2EAAAABJQAAAQEArv5BxLaIE0HYkr1RSIqhAUUZ3OPiV81e8d0Q7Iv2jIQ9LCxnw831HteCwMFzry352dW2UfbmjVMesNOiyZWrE2oHYCG/hQ6ocl5KIY/cNrymZYkzFgnG/HeQBU+YZWkRyT7tNzG6IhgFBs7BZdO1iyEJNaAjsdXZJuv7H2Z4r5aDk8n1A0bzfYGhiIX4uSyUbV6T5njsfBX7Un0IBvf/nbEj6NJ+idF0puoz0gWffRWu1zoJfFs8ddjHSGsp4bKQjsm6msAvc7LZ6csmNec1G9UdUAzd+rxETaRIew7p3E6PiPbTfGuLr283V+SZMMume6bgyK3Bg7/bKv80vD71mw==
我的语法有问题吗?
答案1
是的。密钥本身必须以特定格式打包,而您使用的格式错误。
RSA 密钥对不仅仅是一段随机文本——其内部由几个大数字组成,不同的程序有不同的方法将这些数字编码为字节(序列化它们)。例如,n可能会先去埃或之后;它们可能以大端或小端方式存储;等等。有些格式有一个字段指示密钥类型本身,有些则没有。
您尝试使用的文本p=
是 SSHv2 格式。但是,DKIM 要求它采用 PKCS#1“RSAPublicKey”格式(又称 OpenSSL PEM 格式),尽管 DKIM 规范后来通过展示 X.509“SubjectPublicKeyInfo”格式的示例而自相矛盾,并且许多实现确实接受这两种格式。
PuTTYgen 可以输出两者都不这些公钥格式 – 您需要使用不同的工具。最好使用 DKIM 签名软件提供的密钥生成工具。
(如果您的 DKIM 软件没有附带任何内容,那么该openssl
命令应该可以完成这项工作 - 它的genrsa
和genpkey
命令可以创建一个新的密钥对,然后rsa
或pkey
提取公共一半。)