❶ 使用OpenSSL生成自签名证书
OpenSSL工具提供了一系列步骤来生成自签名证书,这对于实现加密通讯的服务器至关重要。首先,通过运行命令生成私钥(key.pem),这是证书的核心组成部分。接着,私钥需要去除非密码内容以确保安全。
生成证书签名请求(CSR)是关键步骤,它基于你的私钥和特定的证书有效期(默认为-days参数指定的天数),这将决定证书的有效期限。在Windows环境中,这些操作同样适用。
如果你需要生成根证书,需要额外步骤。首先,创建根证书的密钥,并通过输入机构相关信息,生成包含根权限的根证书。这与生成客户端和服务器端证书的过程有所不同。
对于客户端,生成客户端的私钥后,会生成一个请求文件,请求根证书进行签名,最终生成客户端证书client.crt。同样,服务器端的证书生成流程也包含了生成服务器端私钥、请求文件以及由根证书签发server.crt的过程。
通过以上步骤,你便拥有了用于服务器加密通讯的完整证书链,包括自签名的根证书、客户端和服务器端证书,确保了数据传输的安全性。
❷ OpenSSL命令速查手册
OpenSSL是一款功能强大的命令行工具,能够执行公钥体系及HTTPS相关的多项任务。本手册汇总了常用OpenSSL命令的使用方法,包括生成私钥、生成证书签名请求和证书格式转换等。
序:关于证书签名请求(CSR)
若要从证书颁发机构(CA)获取SSL证书,首先需生成证书签名请求(CSR)。CSR包含密钥对中的公钥和一些额外信息,这些信息将在签名时嵌入到证书中。
使用openssl生成CSR时,需要输入证书的唯一标识信息(Distinguished Name),其中重要的一项是常见名(Common Name),它应该是部署证书的主机域名全称(FQDN)。
DN中的其他条目用于提供关于机构的额外信息。若从CA购买SSL证书,通常也需要这些额外字段,如组织机构(Organization),以便真实展示机构详情。
下面是CSR的示例:
也可以以非交互方式提供生成CSR所需的信息,任何需要CSR信息的OpenSSL命令都可以添加-subj选项。例如:
一、生成证书签名请求
本部分涵盖与生成CSR(以及私钥)相关的OpenSSL命令。CSR可用来从CA请求SSL证书。
记住,可以交互式添加CSR信息,也可以使用-subj选项以非交互方式添加相同信息。
1.1 生成私钥和CSR
若需使用HTTPS加固web服务器,需向CA申请证书。生成的CSR可发送给CA以发行其签名的SSL证书。
下面的命令创建一个2048位的私钥(domain.key)和一个CSR(domain.csr):
需要交互式输入CSR信息以完成整个过程。
-newkey rsa:2048选项声明了使用RSA算法生成2048位的私钥。-nodes选项表示不使用密码加密私钥。上面隐含了-new选项,表示要生成一个CSR。
1.2 使用已有私钥生成CSR
若已有私钥,可直接用它向CA申请证书。
下面的命令使用一个已有的私钥(domain.key)创建一个新的CSR(domain.csr):
-key选项用于指定已有的私钥文件,-new选项表示我们要生成一个CSR。
1.3 使用已有的证书和私钥生成CSR
若需要续订已有的证书,但你和CA都没有原始的CSR,则可以再次生成CSR。
例如,下面的命令使用已有的证书(domain.crt)和私钥(domain.key)创建一个新的CSR:
二、生成SSL证书
若只需用SSL证书加固web服务器,而不需要CA签名的证书,则可以自己签发证书。
一种常见的可签发的类型是自签名证书——使用自己的私钥签发的证书。自签名证书可以向CA签发的证书一样用于加密数据,但用户将收到提示说明该证书不被其计算机或浏览器信任。因此,自签名证书只能在不需要向用户证明身份时使用,例如非生产环境或非公开服务。
本部分涵盖自签名证书生成相关的OpenSSL命令。
2.1 生成自签名证书
若需使用HTTPS加固服务器,但不需要CA签发的证书,则可以使用自签名证书。
下面的命令创建一个2048位的私钥(domain.key)和一个自签名证书(domain.crt):
-x509选项指出我们要创建自签名证书,-days 365选项声明该证书的有效期为365天。在上述命令执行过程中将创建一个临时CSR来收集与证书相关的CSR信息。
2.2 使用已有私钥生成自签名证书
也可以使用已有私钥生成自签名证书。例如,下面的命令使用已有的私钥(domain.key)生成一个自签名证书(domain.crt):
-new选项用于启动CSR信息采集提示。
2.3 使用已有的私钥和CSR生成自签名证书
三、查看证书
证书和CSR文件都采用PEM编码格式,并不适合人类阅读。本部分主要介绍OpenSSL中查看PEM编码文件的命令。
3.1 查看CSR条目
下面的命令可以查看CSR文件的明文文本并进行验证:
3.2 查看证书条目
下面的命令可以查看证书文件的明文文本:
3.3 验证证书是否由CA签发
下面的命令用于验证证书domain.crt是否由证书颁发机构(ca.crt)签发:
四、私钥生成与验证
本部分介绍与私钥生成和验证相关的OpenSSL命令。
4.1 创建私钥
下面的命令创建一个密码保护的2048位私钥domain.key:
上述命令会提示输入密码。
4.2 验证私钥
下面的命令可以验证私钥domain.key是否有效:
如果私钥是加密的,命令会提示输入密码,验证密码成功则会显示不加密的私钥。
4.3 验证私钥与证书和CSR匹配
使用下面的命令验证私钥domain.key是否与证书domain.crt以及CSR匹配:
如果上述三个命令的输出一致,那么有很高的概率可以认为私钥、证书和CSR是相关的。
4.4 加密私钥
下面的命令将私钥unencrypted.key加密,输出加密后的私钥encrypted.key:
上述命令执行时会提示设置密码。
4.5 解密私钥
下面的命令将加密私钥encrypted.key解密,并输出明文结果:
上述命令执行时会提示输入解密密码。
五、证书格式转换
我们之前接触的证书都是X.509格式,采用ASCII的PEM编码。还有其他一些证书编码格式与容器类型。OpenSSL可以用来在众多不同类型之间转换证书。本部分主要介绍与证书格式转换相关的OpenSSL命令。
5.1 PEM转DER
可以将PEM编码的证书domain.crt转换为二进制DER编码的证书domain.der:
DER格式通常用于Java。
5.2 DER转PEM
同样,可以将DER编码的证书(domain.der)转换为PEM编码(domain.crt):
5.3 PEM转PKCS7
可以将PEM证书(domain.crt和ca-chain.crt)添加到一个PKCS7(domain.p7b)文件中:
使用-certfile选项指定要添加到PKCS7中的证书。
PKCS7文件也被称为P7B,通常用于Java的Keystore和微软的IIS中保存证书的ASCII文件。
5.4 PKCS7转换为PEM
使用下面的命令将PKCS7文件(domain.p7b)转换为PEM文件:
如果PKCS7文件中包含多个证书,例如一个普通证书和一个中间CA证书,那么输出的PEM文件中将包含所有的证书。
5.5 PEM转换为PKCS12
可以将私钥文件(domain.key)和证书文件(domain.crt)组合起来生成PKCS12文件(domain.pfx):
上述命令将提示你输入导出密码,可以留空不填。
PKCS12文件也被称为PFX文件,通常用于导入/导出微软IIS中的证书链。
5.6 PKCS12转换为PEM
也可以将PKCS12文件(domain.pfx)转换为PEM格式(domain.combined.crt):
注意如果PKCS12文件中包含多个条目,例如证书及其私钥,那么生成的PEM文件中将包含所有条目。