【问题标题】:Create public key Certificate from public key only仅从公钥创建公钥证书
【发布时间】:2019-03-11 16:46:21
【问题描述】:

据我了解,证书是 CA 签署的用户公钥。

我没有用户的 CSR,我只有他的公钥,我想对其进行认证。

如何使用 OpenSSL(命令行)或 .net(使用 C# 编程)验证此公钥?

编辑:更准确地说,我需要使用 CA 私钥签署用户公钥,然后构建 X509 文本文件并以某种方式将其转换为 .PEM 或 .DER 文件

【问题讨论】:

    标签: .net openssl certificate public-key-encryption


    【解决方案1】:

    您可以使用 openssl 验证证书是否正确签名,但这取决于证书的格式。如果我“假设”证书是PEM 格式。 例如

    openssl x509 -in cert.pem -noout -text
    

    将转储存储在证书中的信息。如果有任何不正确的地方,它就会“出错”出来。

    您可以通过以下方式检查证书是否过期: openssl x509 -enddate -checkend 0 -noout -in cert.pem 这将显示结束日期(以 UTC 格式)以及证书是否已过期。

    您还可以使用verify openssl 命令检查证书“链”是否正确。 例如

    openssl verify cert.pem
    

    虽然您可能需要包含中间证书和证书(如果需要)。 例如这是验证 GoDady 签名证书链的示例:

    openssl verify -CAfile .\gdroot-g2.crt -untrusted .\gdig2.crt.pem -show_chain .\server.pem
    .\server.pem: OK
    Chain:
    depth=0: OU = Domain Control Validated, CN = *.XXXX.XXX (untrusted)
    depth=1: C = US, ST = Arizona, L = Scottsdale, O = "GoDaddy.com, Inc.", OU = http://certs.godaddy.com/repository/, CN = Go Daddy Secure Certificate Authority - G2 (untrusted)
    depth=2: C = US, ST = Arizona, L = Scottsdale, O = "GoDaddy.com, Inc.", CN = Go Daddy Root Certificate Authority - G2
    

    当您建立SslStream 连接时,大部分工作都会为您完成。

    至于尝试做所有这些都是代码(例如 C#),您必须更加具体地了解您想要做什么。如果你只是想知道C#是否可以“加载”一个证书,可以使用X509Certificate2CollectionImport方法导入一个PFX格式的证书链。

    导入后,您可以提取任何想要查看的属性。

    您可以使用X509Certificate2 Verify 数学方法验证链。

    【讨论】:

    • 我需要与此相反。换句话说,我需要 openssl 命令将 X509 ANS.1 纯文本文件(我将以编程方式编写)转换为 DER 或 PEM 文件。
    • DER 是一个写入文件(二进制)的 ANS1。 PEM 基本上是带有标记的 ASN1 二进制数据的 base64 版本。所以我不明白你在问什么。
    • 如果它确实是一个 ANS.1 二进制文件:“openssl x509 -in cert.pem -inform der -noout -text”应该转储文件。您知道 ANS.1 是一种编码标准 (en.wikipedia.org/wiki/Abstract_Syntax_Notation_One) - x509 是使用 ANS.1 的证书标准。只要它是 x509 证书,它就可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 2012-09-06
    • 1970-01-01
    • 2017-03-11
    • 2019-12-20
    • 1970-01-01
    相关资源
    最近更新 更多