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
    • 最新
    • 标签
主页 / unix / 问题 / 781587
Accepted
SSLv5
SSLv5
Asked: 2024-08-08 18:57:54 +0800 CST2024-08-08 18:57:54 +0800 CST 2024-08-08 18:57:54 +0800 CST

当没有可用的 CSR 或私钥时,如何仅使用公钥(PEM 格式)使用 OpenSSL 创建 X.509 证书?

  • 772

如何仅使用公钥使用 OpenSSL 创建 X.509 证书?

在这种情况下,我只有待认证的公钥(PEM 格式),我需要从中创建 X.509 证书。此给定公钥应位于X.509 证书中。待认证公钥的SubjectPublicKeyInfo私钥在此情况下不可用!

但是,当然,用于签署证书的颁发者(CA) 密钥是可用的,包括私钥。我知道我需要私钥来签署证书 😏

现在,我明白了待认证的公钥通常包装在 CSR 中。并且 CSR 通常由待认证公钥的私钥签名。但是,如前所述,我这里没有CSR,只有“普通”待认证公钥。从技术上讲,这根本不是问题。但是 OpenSSL 能以这种方式创建 X.509 证书吗?

我发现最接近的是:

openssl x509 -new -key ca_key.pem -force_pubkey tbs_pubkey.pem -subj "/CN=Test"

不幸的是,上述命令生成了一个看起来像“自签名”的证书,其中包含来自的公钥,tbs_pubkey.pem并由来自的私钥签名ca_key.pem,因此生成的“自签名”证书的签名实际上是无效的……☹️

openssl
  • 1 1 个回答
  • 40 Views

1 个回答

  • Voted
  1. Best Answer
    garethTheRed
    2024-08-08T19:57:33+08:002024-08-08T19:57:33+08:00

    这是一个快速而简单的根 CA:

    openssl req -x509 -newkey rsa:2048 -subj "/CN=My Root CA" -keyout rca.key -out rca.pem -nodes -addext "basicConstraints = critical, CA:true"
    

    以下是向新证书添加扩展的 OpenSSL 配置文件示例:

    cat TLS_Cert.cnf
    [tls]
    keyUsage = critical,digitalSignature
    extendedKeyUsage=serverAuth
    

    这是我的孤独(EC)公钥:

    cat pubkey.pem
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE9ZKRcglgL1Af01p+f+SwcLeArN26
    nG4mvaH/oRABk0U94V4J+RG0g41Lrxm6MrW7IkqOeEnEqJ0T883H9kPwlg==
    -----END PUBLIC KEY-----
    

    现在强制将其转换为由 CA 签名的证书:

    openssl x509 -new -CAkey rca.key -CA rca.pem -force_pubkey pubkey.pem -subj "/CN=No Private Key" -extfile TLS_Cert.cnf -extensions tls -out noPrivKey.pem
    

    关键(请原谅这个双关语)是使用-CAkey并将-CAOpenSSL 指向 CA 的私钥和证书。后者的主题将用作新证书中的颁发者。

    openssl x509 -noout -text -in noPrivKey.pem
    Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            78:f9:f9:23:b3:c5:a4:2b:d1:5c:79:bc:90:75:dd:3a:28:74:bc:06
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = My Root CA
        Validity
            Not Before: Aug  8 12:23:10 2024 GMT
            Not After : Sep  7 12:23:10 2024 GMT
        Subject: CN = No Private Key
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:f5:92:91:72:09:60:2f:50:1f:d3:5a:7e:7f:e4:
                    b0:70:b7:80:ac:dd:ba:9c:6e:26:bd:a1:ff:a1:10:
                    01:93:45:3d:e1:5e:09:f9:11:b4:83:8d:4b:af:19:
                    ba:32:b5:bb:22:4a:8e:78:49:c4:a8:9d:13:f3:cd:
                    c7:f6:43:f0:96
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication
            X509v3 Subject Key Identifier: 
                30:FB:92:B8:58:63:B5:96:01:58:95:31:13:A3:20:02:F9:EF:EB:8A
            X509v3 Authority Key Identifier: 
                E5:8C:A8:DD:2F:FC:96:55:3D:EF:60:F5:9E:56:2D:AD:AC:43:0D:6B
    Signature Algorithm: sha256WithRSAEncryption
    Signature Value:
        07:4f:00:58:6c:07:22:f4:ff:d8:22:d5:36:64:86:c6:9c:84:
        1b:45:4b:77:4c:75:09:cd:bb:12:85:88:99:d6:5f:3a:e4:3a:
        e2:08:e5:46:bc:57:14:51:84:b6:b2:03:e8:e3:5b:da:be:50:
        75:a5:59:59:14:ac:12:f4:e4:d6:91:d4:d4:1a:e6:24:45:d8:
        d9:66:19:dd:a2:ab:d5:b9:d2:8e:2d:03:09:81:ac:0d:46:2c:
        e1:17:43:de:b9:f5:cd:65:1c:4f:8c:f8:08:43:b7:d4:e1:8f:
        f2:a8:f7:34:10:d6:c2:24:03:81:4b:d1:74:44:18:8d:69:85:
        f0:5b:c5:55:cc:84:a3:24:7e:50:67:f2:6b:89:16:da:4e:24:
        c2:1a:5c:98:aa:f0:4c:c6:cf:03:5d:59:82:20:80:3f:22:74:
        f0:c1:36:93:22:f9:fe:7f:e9:3b:99:f3:4e:00:22:bc:9b:7a:
        ba:97:35:8d:d8:42:bf:02:c3:4a:82:6a:db:f5:83:a9:fc:65:
        1b:4e:27:a4:e4:85:a2:18:83:6d:d1:4e:d6:db:ff:d8:de:f3:
        b3:c7:19:e1:7a:15:e9:b3:44:a0:53:8b:9a:6a:3c:ad:68:58:
        5f:28:c8:c2:8d:1b:6a:a5:16:6f:05:11:25:67:c5:35:80:3d:
        b2:aa:6c:aa
    

    请注意,由 RSA 根密钥签名的小型 ECC 公钥。此外,主题和发行者是正确的,并且添加了来自文件的扩展名。

    警告:

    这对于测试、播放等来说没问题,但您不应该使用受信任的 CA 证书执行此操作,因为如果不使用公钥对应的私钥,您就无法证明拥有该私钥。

    CA 应该拒绝此类请求,因为没有证据表明公钥属于主体所有。

    有关详细信息,请参阅RFC 4211

    • 0

相关问题

  • 带有 -servername 的 openssl -showcerts 给出了错误的锚点/根目录?

  • openssl 'genpkey -algorithm RSA' vs. 'genrsa'

  • 手动验证 S/MIME 消息摘要

  • 如何使用 pv 显示 openssl 加密/解密的进度?

  • 对 openssl 加密文件中的盐感到困惑

Sidebar

Stats

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

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve