Как проверить сгенерированные 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-----

, а другой генерирует запись DNS DKIM, которая, как я предполагаю, содержит открытый ключ :

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, однако вывод явно отличается от того, что в разделе "p=" записи DNS (это даже не та же длина):

# ssh-keygen -y -f default.private 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDJy9S18vHtrIQNep9PogJfrKNLKKf2VSOvUwOzItlWkY3cRCFxscSNjfC4QHREcMeUuNO78wvQ+oOk+exLdyl2BggcA659Wi6v8X/+awLXpa9sB6viGPi8Zx560GbZu6jGLlEzcOaGDCYqdUxZIdAaOICDORFa3XAywHi87eQPMw==

Итак, что происходит здесь? Разве ssh-keygen не подходит для этого (, может быть, мне следует что-то сделать с OpenSSL?)? Разве "p=" не является открытым ключом? Или на самом деле мои закрытый и открытый ключи не совпадают?

Спасибо!

PS, возможно, это не связано с тем, что я предполагаю, что открытый ключ, сгенерированный opendkim, всегда один и тот же для первых 34 символов — MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQ— и всегда заканчивается на IDAQAB.

4
задан 2 October 2021 в 06:36
1 ответ

Вы можете сравнить модуль обоих, следующим образом:

Захватите открытый ключ из вашей записи 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
4
ответ дан 2 October 2021 в 07:05

Теги

Похожие вопросы