自签发证书

标签(空格分隔): OpenSSL


SSL握手

1、爱丽丝给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。
2、鲍勃确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。
3、爱丽丝确认数字证书有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给鲍勃。
4、鲍勃使用自己的私钥,获取爱丽丝发来的随机数(即Premaster secret)。
5、爱丽丝和鲍勃根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"(session key),用来加密接下来的整个对话过程。

后缀详解

格式描述
.key私有的秘钥
.csr证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
.crt证书文件,certificate的缩写
.crl证书吊销列表,Certificate Revocation List的缩写
.pem用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式
.der用于二进制DER编码证书
.pem用于不同类型的X.509v3文件,是以“ - BEGIN ...”前缀的ASCII(Base64)数据

自签发步骤

准备工作

cd /etc/pki/CA/

touch /etc/pki/CA/index.txt

touch /etc/pki/CA/serial

echo 01 > /etc/pki/CA/serial

CA根证书

生成CA私钥(.key)–>生成CA证书请求(.csr)–>自签名得到根证书(.crt)(CA给自已颁发的证书)

# 生成CA私钥文件
openssl genrsa -out ca.key 2048

# 生成证书签名请求文件
openssl req -new -key ca.key -out ca.csr# Generate Self Signed certificate(CA 根证书)

# 根据请求文件生成证书
openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt

Server 证书

openssl genrsa -des3 -out server.key 1024

openssl req -new -key server.key -out server.csr

openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key

Client 证书

openssl genrsa -des3 -out client.key 1024

openssl req -new -key client.key -out client.csr

openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key

证书格式转换

PEM格式转DER格式

openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER

DER格式转PEM格式

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

将包含私钥和证书的PKCS#12文件(.pfx .p12)转换为PEM

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

openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes

将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

将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

将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

将PFX转换为PEM

openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes

证书内容查看

查看PEM编码证书

openssl x509 -in cert.pem -text -noout

openssl x509 -in cert.cer -text -noout

openssl x509 -in cert.crt -text -noout

注意

如果您遇到这个错误,这意味着您正在尝试查看DER编码的证书,并需要使用“查看DER编码证书”中的命令。

unable to load certificate
12626:error:0906D06C:PEMroutines:PEM_read_bio:no start line:pem_lib.c:647:Expecting: TRUSTEDCERTIFICATE

查看DER编码证书

openssl x509 -in certificate.der -inform der -text -noout

注意

如果您遇到以下错误,则表示您尝试使用DER编码证书的命令查看PEM编码证书。在“查看PEM编码的证书”中使用命令。

unable to load certificate
13978:error:0D0680A8:asn1 encodingroutines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1306:
13978:error:0D07803A:asn1 encodingroutines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:380:Type=X509

通过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-----
最后修改:2020 年 10 月 11 日 07 : 23 PM
如果觉得我的文章对你有用,请随意赞赏