如何将pem证书转换为.crt和.key与证书格式介绍

 更新时间:2024年01月07日 08:47:39   投稿:WDC  
这篇文章主要介绍了如何将pem证书转换为.crt和.key与证书格式介绍,需要的朋友可以参考下

证书格式介绍

PKCS 全称是 Public-Key Cryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准,PKCS 目前共发布过 15 个标准。 常用的有:

  • PKCS#7:Cryptographic Message Syntax Standard

  • PKCS#10:Certification Request Standard

  • PKCS#12:Personal Information Exchange Syntax Standard

  • X.509:是常见通用的证书格式。所有的证书都符合为Public Key Infrastructure (PKI) 制定的 ITU-T X509 国际标准。

  • PKCS#7:常用的后缀是: .P7B .P7C .SPC

  • PKCS#12:常用的后缀有: .P12 .PFX

  • X.509:DER 编码(ASCII)的后缀是: .DER .CER .CRT

  • X.509:PAM 编码(Base64)的后缀是: .PEM .CER .CRT

  • .cer/.crt:是用于存放证书,它是2进制形式存放的,不含私钥

  • .pem:跟crt/cer的区别是它以Ascii来表示。

  • pfx/p12:用于存放个人证书/私钥,他通常包含保护密码,2进制方式

  • p10:是证书请求

  • p7r:是CA对证书请求的回复,只用于导入

  • p7b:以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。

关于证书后缀格式来自: https://www.chinassl.net/ssltools/convert-ssl-commands.html

.pem转换的问题描述

.pem文件中提取/转换证书.crt和私钥.key文件的正确方法或者命令是什么?我知道它们是可转换的,但是不清楚怎么做。

最佳解决方法

可以使用以下方式将pem转换为crt:

openssl x509 -outform der -in your-cert.pem -out your-cert.crt

可行的解决方法整理

使用OpenSSL进行转换

以下命令允许将证书和密钥转换为不同的格式,使其与特定类型的服务器或软件兼容。

  • DER文件(.crt .cer .der)转换为PEM
openssl x509 -inform der -in certificate.cer -out certificate.pem
  • PEM文件转换为DER
openssl x509 -outform der -in certificate.pem -out certificate.der
  • 将包含私钥和证书的PKCS#12文件(.pfx .p12)转换为PEM
openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes

You can add -nocerts to only output the private key or add -nokeys to only output the certificates.

  • PEM证书文件和私钥转换为PKCS#12(.pfx .p12)
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
  • PEM转换为CRT(.CRT文件)
openssl x509 -outform der -in certificate.pem -out certificate.crt

OpenSSL转换PEM

  • PEM转换为DER
openssl x509 -outform der -in certificate.pem -out certificate.der
  • PEM转换为P7B
openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
  • PEM转换为PFX
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt

OpenSSL转换DER

  • DER转换为PEM
openssl x509 -inform der -in certificate.cer -out certificate.pem

OpenSSL转换P7B

  • P7B转换为PEM
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
  • P7B转换为PFX
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer

OpenSSL转换PFX

  • PFX转换为PEM
openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes

通过OpenSSL生成rsa密钥

  • 在命令行上使用OpenSSL,首先需要生成公钥和私钥,应该使用-passout参数密码保护此文件,该参数可以采用许多不同的形式,可以请参阅OpenSSL文档。
    openssl genrsa -out private.pem 1024
  • 这将创建一个名为private.pem的密钥文件,该文件使用1024位(bits)。该文件实际上同时具有私钥和公钥,可以从该文件中提取公共密钥:
openssl rsa -in private.pem -out public.pem -outform PEM -pubout

or

openssl rsa -in private.pem -pubout > public.pem

or

openssl rsa -in private.pem -pubout -out public.pem

现在你的public.pem只包含公钥,可以和第三方自由地分享。可以通过使用公钥加密自己的东西然后使用私钥进行解密来测试,首先我们需要一些数据做加密:

  • 示例文件:
echo 'too many secrets' > file.txt

现在在file.txt中有一些数据,可以使用OpenSSL和公钥进行加密:

openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl
  • 这将创建一个加密版本的file.txt,命令这个文件为file.ssl(如果直接打开这个文件查看那么它看起来只是二进制垃圾,人类无法看懂)。然后可以使用私钥解密它:
openssl rsautl -decrypt -inkey private.pem -in file.ssl -out decrypted.txt
  • 现在在decryptpted.txt中有一个未加密的文件:
cat decrypted.txt
|output -> too many secrets

OpenSSL中的RSA工具选项

  • 名称:
    rsa - RSA密钥处理工具

  • 概要:
    openssl rsa [-help] [-inform PEM | NET | DER] [-outform PEM | NET | DER] [-in filename] [-passin arg] [-out filename] [-passout arg] [-aes128] [ -aes192] [-aes256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin ] [-pubout] [-RSAPublicKey_in] [-RSAPublicKey_out] [-engine id]

  • 说明:
    rsa命令处理RSA密钥。它们可以在各种形式之间进行转换,并将其组件打印出来。注意,此命令使用传统的SSLeay兼容格式进行私钥加密:较新的应用程序应使用pkcs8实用程序使用更安全的PKCS#8格式。

  • 命令选项:
    -help:打印出使用信息。
    -inform DER|NET|PEM:指定输入格式。 DER选项使用与PKCS#1 RSAPrivateKey或SubjectPublicKeyInfo格式兼容的ASN1 DER编码格式。 PEM格式是默认格式:它由DER格式base64编码,带有附加的页眉和页脚行。在输入PKCS#8格式的私钥也被接受。 NET格式是在NOTES部分中描述的格式。
    -outform DER|NET|PEM:指定输出格式,选项与-inform选项的含义相同。
    -in filename:如果未指定此选项,则指定从或从标准输入读取密钥的输入文件名。如果密钥加密,将提示输入密码。
    -passin arg:输入文件的密码来源。有关arg的格式的更多信息,参阅openssl中的PASS PHRASE ARGUMENTS部分。
    -out filename:如果未指定此选项,则指定将密钥写入或输出的输出文件名。如果设置了任何加密选项,则会提示输入密码。输出文件名不能与输入文件名相同。
    -passout password:输出文件密码来源。有关arg的格式的更多信息,参阅openssl中的PASS PHRASE ARGUMENTS部分。
    -aes128|-aes192|-aes256|-camellia128|-camellia192|-camellia256|-des|-des3|-idea这些选项在输出之前用指定的密码加密私钥。会有同通行提示信息。如果没有指定这些选项,则key以纯文本形式写入。这些选项只能用于PEM格式的输出文件。
    -text:除了编码版本之外,以纯文本形式打印各种公共或私人密钥组件。
    -noout:此选项可防止输出密钥的编码版本。
    -modulus:此选项打印出该键的取模数值。
    -check:此选项将检查RSA私钥的一致性。
    -pubin:默认情况下,从输入文件读取私钥:使用此选项读取公钥。
    -pubout:默认情况下会输出一个私钥:使用此选项将会输出一个公钥。如果输入是公钥,则会自动设置此选项。
    -RSAPublicKey_in, -RSAPublicKey_out:像-pubin和-pubout一样,除了使用RSAPublicKey格式的情形。
    -engine id:指定一个引擎(通过其获得唯一的id字符串)将导致rsa尝试获得对特定引擎功能的引用,从而在需要时进行初始化。然后,引擎将被设置为所有可用算法的默认值。

笔记

  • PEM私钥格式使用以下页眉和页脚行:
-----BEGIN RSA PRIVATE KEY-----

-----END RSA PRIVATE KEY-----
  • PEM公钥格式使用以下页眉和页脚行:
-----BEGIN PUBLIC KEY-----

-----END PUBLIC KEY-----
  • PEM RSAPublicKey格式使用以下页眉和页脚线:
-----BEGIN RSA PUBLIC KEY-----

-----END RSA PUBLIC KEY-----

NET格式是与旧的Netscape服务器和Microsoft IIS .key文件兼容的格式,它使用未加密的RC4进行加密。这种方法不是很安全,所以只能在必要时使用。一些较新版本的IIS在导出的.key文件中有其他额外的数据。要使用这些实用程序,请使用二进制编辑器查看文件,并查找字符串"private-key",然后追溯到字节序列0x300x82(这是一个ASN1 SEQUENCE)。将所有数据从此点复制到另一个文件,并将其用作带有-inform NET选项的rsa实用程序的输入。

例子

  • 要删除RSA私钥上的密码短语:
 openssl rsa -in key.pem -out keyout.pem
  • 使用三重DES加密私钥:
openssl rsa -in key.pem -des3 -out keyout.pem
  • 将私钥从PEM转换为DER格式:
  openssl rsa -in key.pem -outform DER -out keyout.der
  • 将私钥的组件输出到标准输出:
openssl rsa -in key.pem -text -noout
  • 要输出私钥的公共部分:
  openssl rsa -in key.pem -pubout -out pubkey.pem
  • RSAPublicKey格式输出私钥的公共部分:
  openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem

到此这篇关于如何将pem证书转换为.crt和.key与证书格式介绍的文章就介绍到这了,更多相关如何将pem证书转换为.crt和.key与证书格式介绍内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 如何将pem证书转换为.crt和.key与证书格式介绍

    如何将pem证书转换为.crt和.key与证书格式介绍

    这篇文章主要介绍了如何将pem证书转换为.crt和.key与证书格式介绍,需要的朋友可以参考下
    2024-01-01
  • Rsync ERROR: auth failed on module解决方法

    Rsync ERROR: auth failed on module解决方法

    今天在两台服务器同步备份在用户权限上纠结了很多,主要关于这个问题网上的配置方法不一,源自rsync版本不一致,这里简单总结下,方便需要的朋友
    2013-09-09
  • linux使用dd命令查看服务器磁盘IO性能

    linux使用dd命令查看服务器磁盘IO性能

    dd命令是Linux系统中的一个非常强大的工具,它可以用于复制文件、转换文件格式、备份数据等,这篇文章主要介绍了linux查看服务器磁盘IO性能,需要的朋友可以参考下
    2024-02-02
  • MongoDB学习笔记(四) 用MongoDB的文档结构描述数据关系

    MongoDB学习笔记(四) 用MongoDB的文档结构描述数据关系

    MongoDB的集合(collection)可以看做关系型数据库的表,文档对象(document)可以看做关系型数据库的一条记录。但两者并不完全对等
    2013-07-07
  • 阿里云服务器部署RabbitMQ集群的详细教程

    阿里云服务器部署RabbitMQ集群的详细教程

    本文是对 RabbitMQ 进阶 阿里云服务器部署RabbitMQ集群简单的概述,搭建集群达到消息的高可用,高可靠,可以提高吞吐量,集群部署是一个很不错的选择,镜像队列集群,这个我们可以根据配置来进行同步规则,根据需求来定制化我们的规则,感兴趣的朋友一起看看吧
    2022-05-05
  • VPS服务器常用性能测试脚本汇总

    VPS服务器常用性能测试脚本汇总

    这篇文章主要介绍了VPS服务器常用性能测试脚本汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • HTTPS混合内容解析附解决方法

    HTTPS混合内容解析附解决方法

    我们可能会有这样的经验,当我们通过HTTPS访问一个网站的时候,突然有提示:“本页面包含有不安全的内容”。这个时候会询问是否显示“不安全的内容”,这个时候,就是遇到了有混合内容的页面了
    2017-09-09
  • 如何使用宝塔部署RustDesk中继服务器

    如何使用宝塔部署RustDesk中继服务器

    这篇文章主要介绍了如何使用宝塔部署RustDesk中继服务器,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-12-12
  • 云服务器宝塔面板的安装图文教程详解

    云服务器宝塔面板的安装图文教程详解

    这篇文章主要介绍了云服务器宝塔面板的安装教程,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • Apache Hudi基于华米科技应用湖仓一体化改造

    Apache Hudi基于华米科技应用湖仓一体化改造

    这篇文章主要介绍了Apache Hudi基于华米科技应用湖仓一体化改造 ,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-03-03

最新评论