当前位置:首页 > 行业动态 > 正文

从证书中获取公钥

从证书中提取公钥需解析证书结构,常见X.509证书可通过OpenSSL命令行工具或编程库实现,使用openssl x509命令解析PEM/DER格式证书,或通过Python cryptography库加载证书对象后调用public_key()方法直接获取公钥数据,支持RSA/ECC等多种加密算法。

在网络安全与数据加密领域,公钥是数字证书的核心组成部分,常用于验证身份、加密通信或数字签名,以下提供多种从证书中提取公钥的方法,操作步骤清晰且适用于不同场景。


通过命令行工具提取公钥(OpenSSL)

OpenSSL是广泛使用的开源工具,支持证书解析与密钥管理。

  1. 查看证书内容(以PEM格式为例)
    若证书文件为certificate.pem,执行命令:

    openssl x509 -in certificate.pem -text -noout
    ```  包含证书持有者、颁发者、有效期及公钥信息。
  2. 直接提取公钥并保存
    运行以下命令生成公钥文件public_key.pem

    从证书中获取公钥

    openssl x509 -in certificate.pem -pubkey -noout > public_key.pem

    公钥将以PEM格式存储,可直接用于加密或验证签名。

适用场景:服务器管理员、开发者在本地环境快速操作。


通过编程语言提取公钥

若需集成到代码中,以下为常用语言示例:

从证书中获取公钥

  1. Python(使用cryptography库)

    from cryptography import x509
    from cryptography.hazmat.primitives.serialization import Encoding, PublicFormat
    with open("certificate.pem", "rb") as cert_file:
        pem_data = cert_file.read()
        cert = x509.load_pem_x509_certificate(pem_data)
        public_key = cert.public_key().public_bytes(
            Encoding.PEM,
            PublicFormat.SubjectPublicKeyInfo
        )
        print(public_key.decode())
  2. Java(使用KeyStore类)

    import java.io.FileInputStream;
    import java.security.cert.CertificateFactory;
    import java.security.cert.X509Certificate;
    public class ExtractPublicKey {
        public static void main(String[] args) throws Exception {
            CertificateFactory cf = CertificateFactory.getInstance("X.509");
            X509Certificate cert = (X509Certificate) cf.generateCertificate(
                new FileInputStream("certificate.der")
            );
            System.out.println(cert.getPublicKey());
        }
    }

适用场景:开发者在应用程序中自动化处理证书。

从证书中获取公钥


使用在线工具解析证书

对非技术用户,以下工具可快速提取公钥:

  1. SSL Checker(如SSL Shopper)
    上传证书文件或输入域名,工具自动解析并显示公钥。
  2. Certificate Decoder(如Decode Cert)
    粘贴证书内容(PEM格式),直接获取公钥字段。

注意事项

  • 仅限测试或非敏感场景使用,避免上传含私钥的文件。
  • 选择可信的在线工具,确认其隐私政策。

关键注意事项

  1. 区分证书格式
    • PEM:以-----BEGIN CERTIFICATE-----开头,文本格式。
    • DER:二进制格式,可通过OpenSSL转换为PEM:
      openssl x509 -inform der -in certificate.der -out certificate.pem
  2. 公钥与私钥的区别
    • 公钥可公开分发,用于加密数据或验证签名。
    • 私钥必须严格保密,用于解密或生成签名。
  3. 证书链完整性
    提取公钥时需确保证书未过期且由可信机构签发,避免中间人攻击风险。

引用说明

  • OpenSSL官方文档:https://www.openssl.org/docs/
  • Python cryptography库文档:https://cryptography.io/
  • RFC 5280(X.509证书标准):https://tools.ietf.org/html/rfc5280