Openssl
如何驗證 opendkim 生成的 RSA 密鑰
我正在嘗試診斷 OpenDKIM 驗證錯誤(請參閱此問題)。在野獸的肚子裡,我正試圖確保生成的密鑰實際上是正確的。
我正在生成我的密鑰
opendkim-genkey -r -d example.com
。這會生成兩個文件。一個是 RSA 私鑰(文件default.private
):-----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQDJy9S18vHtrIQNep9PogJfrKNLKKf2VSOvUwOzItlWkY3cRCFx scSNjfC4QHREcMeUuNO78wvQ+oOk+exLdyl2BggcA659Wi6v8X/+awLXpa9sB6vi GPi8Zx560GbZu6jGLlEzcOaGDCYqdUxZIdAaOICDORFa3XAywHi87eQPMwIDAQAB AoGAVSjAvnwlHqEEJVAPNSLwj4Gic9BXeXwakB2fXRSi1YadcEwMNRfJE9fHs2n3 5v4VK60IJbP+05U0wwV5c6t5AgZqpP0GBW8CKUr3BwaF2cJbd+uOXlAm4cx6/S1E Ocoku0c/vrr3mkO41IuBkB+FRm0y7WXFi7e7M32Tictt0CkCQQDzE08wRLNXxkaM LyUDMvCtlNzACcmkU73NAHDHhwtrJMMLp7q/s4VIDbmhysoNBblNHJQvA/7zVd13 1CGxbh8/AkEA1IajRLNJ6XTuv9RmK1622BDWix4ogEvbev/zR8ti2JifO6A5gv+L na5hVAATo563pWjtNZW3sAVKqN7juN5HDQJAP1xKKP/Pa9LQMtxbHoFZwTVrcVdb y0zUzaoOu8PU0yHrAY/AGxY1aLnDKIxOrKRQT+xiJ/s3qsA4EXMnMTPOSwJBAK5N dl6EBRyZsK5YDyuG1MNEnBEhPOpsTKgGf4rkfj9SfVYzxLdxyxoZyO1R2smZBNl+ wv3tuud8j40MsQwQEYkCQBCzH+1IaxoMsSggutvEvqz2SqkFbD5rq/+uL6P6xyYg PHCYIWomK8zOlmnO+bfbRIzQb7I81vOFq2sr0yQLK+0= -----END RSA PRIVATE KEY-----
一個生成 DKIM DNS 條目,我假設它包含公鑰:
default._domainkey IN TXT ( "v=DKIM1; k=rsa; s=email; " "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJy9S18vHtrIQNep9PogJfrKNLKKf2VSOvUwOzItlWkY3cRCFxscSNjfC4QHREcMeUuNO78wvQ+oOk+exLdyl2BggcA659Wi6v8X/+awLXpa9sB6viGPi8Zx560GbZu6jGLlEzcOaGDCYqdUxZIdAaOICDORFa3XAywHi87eQPMwIDAQAB" ) ; ----- DKIM key default for example.com
我假設“p=”條目是公鑰,但如果是,我不知道如何驗證它們是否匹配。我想我可以用 來做到這一點
ssh-keygen -y -f default.private
,但是,它的輸出與 DNS 條目的“p =”部分中的輸出明顯不同(它甚至不是相同的長度):# ssh-keygen -y -f default.private ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDJy9S18vHtrIQNep9PogJfrKNLKKf2VSOvUwOzItlWkY3cRCFxscSNjfC4QHREcMeUuNO78wvQ+oOk+exLdyl2BggcA659Wi6v8X/+awLXpa9sB6viGPi8Zx560GbZu6jGLlEzcOaGDCYqdUxZIdAaOICDORFa3XAywHi87eQPMw==
那麼,這裡發生了什麼?ssh-keygen 不是正確的方法嗎(也許我應該用 OpenSSL 做點什麼?)?“p=”不是公鑰嗎?或者,事實上,我的私鑰和公鑰不匹配?
謝謝!
PS,作為一個可能無關的旁白,我假設由 opendkim 生成的公鑰對於前 34 個字元總是相同的
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQ
——並且總是以IDAQAB
.
您可以比較兩者的模數,如下所示:
從您的 DNS 記錄中獲取公鑰。
p=
正如您所說,這是 中的字元串。請注意,它有時會作為兩個字元串返回,您需要將其加入。您只需要內容,而不是雙引號。將其保存在本地,為public.key.b64
.轉換為 DER 格式:
openssl enc -base64 -d -in public.key.b64 -out public.key
查看此公鑰的模數:
openssl rsa -pubin -inform DER -in public.key -noout -modulus
查看您的私鑰的模數:
openssl rsa -in private.key -noout -modulus
兩者的輸出將類似於以下內容並且必須匹配:
Modulus=B475A0F01B6DE62AB578E27CF2DF8F760C9C10DF52E69F4ED2FEA6912D8528F5860F6C1AB3F7DD88D4C63A1DA5A848D7655192FF6040E0405826648047EB25ECB0F56FDCB825987D48FA3953DCB04F78521F607137179C7EE081C48AF7DFB2F130E3001B80433977E962D900B9AFC9808F39B3D041213D39B5FA447EE39E838E67D5CD2EA373D68CFDB2DF3CD0260C6D7C88A7415195EEB85DBD31594E11D4BAD49C52098A8E77B56D034B04234A9064C92DBEB6A7B745EB9821446A56FF34284A0AA27768E55BF263E8D2F3B7BE52ECBE3F4590BAF7AD33DDECAD997DC61B8EAD2854714B13FAF7035758A21651740A9B36077ABC715080243626A1B3661233