AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1147017
Accepted
Dmitry
Dmitry
Asked: 2023-11-02 00:38:00 +0800 CST2023-11-02 00:38:00 +0800 CST 2023-11-02 00:38:00 +0800 CST

使用 ssh-keygen 创建一对适合 DKIM 设置的密钥

  • 772

问题

创建一对适合DKIM设置使用的密钥的正确方法是什么ssh-keygen?

给出相应的解决方案openssl:

# creates a private key
openssl genrsa -out sample.key 1024

# creates a public key 
openssl rsa -in sample.key -pubout -out sample.pub

故事

我试图使用DKIM以下过程生成密钥:

# creates a pair of keys: sample & sample.pub
ssh-keygen -m PEM -t rsa -b 1024 -f sample

# coverts the public key into the PEM format
ssh-keygen -f sample.pub -m PEM -e > sample.pem.pub

PEM公钥内容示例:

-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAOO3Emm+KdOKKhwlCjLXIE1R76KlWY6xSVfHsjE3uuMcF0BDKhJS2Kg3
WjhdnV2z5XAQDAxknQvx+sxxbsBye6Zc2VnNA9upDVVlNc4I6zl1N75CY7F1Nfbj
wDrpWqGJuBPsousqj79dJ/JM0pzCn71IkEumU2Ck3AULSnT9MLeZAgMBAAE=
-----END RSA PUBLIC KEY-----

构造DKIM记录:

v=DKIM1; p=MIGJAoGBAOO3Emm+KdOKKhwlCjLXIE1R76KlWY6xSVfHsjE3uuMcF0BDKhJS2Kg3WjhdnV2z5XAQDAxknQvx+sxxbsBye6Zc2VnNA9upDVVlNc4I6zl1N75CY7F1NfbjwDrpWqGJuBPsousqj79dJ/JM0pzCn71IkEumU2Ck3AULSnT9MLeZAgMBAAE=

我使用https://dkimcore.org/c/keycheck来验证 DNS 记录,这使我无法获取所提供的值,并显示以下消息:

这似乎不是有效的 RSA 公钥: RSA.xs:178: OpenSSL error: bad tag at blib/lib/Crypt/OpenSSL/RSA.pm (自动分割成 blib/lib/auto/Crypt/OpenSSL/RSA /new_public_key.al) 第 91 行。

尝试过这些版本:

$ ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017
OpenSSH_8.1p1, OpenSSL 1.1.1d  10 Sep 2019
OpenSSH_9.4p1, OpenSSL 3.1.2 1 Aug 2023

openssl幸运的是,我得到了上面提到的解决方法。但由于经常ssh-keygen 被 提到作为密钥生成的有效工具,我想知道到底是什么方法? DKIM

dkim
  • 1 1 个回答
  • 69 Views

1 个回答

  • Voted
  1. Best Answer
    Dmitry
    2023-11-02T20:59:22+08:002023-11-02T20:59:22+08:00

    长话短说

    生成一对密钥:

    ssh-keygen -t rsa -b 1024 -f sample
    

    将公钥转换为以下PKCS #8格式:

    ssh-keygen -f sample.pub -m PKCS8 -e > sample.pub.pem
    

    笔记

    Internet 标准 RFC6376将 DKIM 记录的默认密钥类型指定为 RSA,并将相应的公钥数据指定为 base64 编码的 ASN.1 DER 编码的 RSAPublicKey。

    对初始公钥的检查显示:

        0:d=0  hl=3 l= 137 cons: SEQUENCE
        3:d=1  hl=3 l= 129 prim:  INTEGER           :B758174EDA...bytes...179D51DD18F9
      135:d=1  hl=2 l=   3 prim:  INTEGER           :010001
    

    解决方案结果的检查:

    openssl asn1parse -i -inform PEM -in sample.pub.pem
    

    显示:

        0:d=0  hl=3 l= 159 cons: SEQUENCE
        3:d=1  hl=2 l=  13 cons:  SEQUENCE
        5:d=2  hl=2 l=   9 prim:   OBJECT            :rsaEncryption
       16:d=2  hl=2 l=   0 prim:   NULL
       18:d=1  hl=3 l= 141 prim:  BIT STRING
    

    这实际上是密钥所需的包装。BIT STRING18岁还可以检查:

    openssl asn1parse -i -inform PEM -in sample.pub.pem -strparse 18
    
        0:d=0  hl=3 l= 137 cons: SEQUENCE
        3:d=1  hl=3 l= 129 prim:  INTEGER           :B758174EDA...same bytes...1DD18F9
      135:d=1  hl=2 l=   3 prim: INTEGER           :010001
    

    最新版本的 man 请ssh-keygen 注意,使用-m PEM将导致密钥以旧版 PEM 私钥格式存储。这也被称为OpenSSL 的 PEM 格式。

    很快就能注意到的差异在于标题标签。-m PKCS8产生:

    -----BEGIN PUBLIC KEY-----
    ...
    -----END PUBLIC KEY-----
    

    同时-m PEM:

    -----BEGIN RSA PUBLIC KEY-----
    ...
    -----END RSA PUBLIC KEY-----
    

    值得一提的是,拟议标准 RFC8301指出:

    签名者必须对所有密钥使用至少 1024 位的 RSA 密钥。签名者应该使用至少 2048 位的 RSA 密钥。

    虽然仍然认识到应有方法的实际局限性:

    广泛使用的 DNS 配置软件对密钥大小设置了实际限制,因为该软件仅处理 TXT 记录中的单个 256 八位字节字符串,而明显长于 1024 位的 RSA 密钥不适合 256 八位字节。

    因此,如果适用,应使用具有推荐位长度的方法:

    # generates a pair
    ssh-keygen -t rsa -b 2048 -f sample
    
    # converts the public key into the `PKCS #8`
    ssh-keygen -f sample.pub -m PKCS8 -e > sample.pub.pem
    
    • 1

相关问题

  • 为什么 dkim 不签署这封信?

  • 这封电子邮件如何通过 DMARC?

  • 雅虎域密钥设置,获取 dkim=permerror(无密钥)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve