Skip to content

openssl常用命令之创建、检查密钥和证书 #13

@timest

Description

@timest

version:

$ openssl version
OpenSSL 1.0.2j  26 Sep 2016

创建RSA密钥

$ opnessl genrsa -out fd.key

在目前的版本里,密钥的默认长度是2048位,如果需要1024位或其他长度,可以用:
$ openssl genrsa -out fd.key 1024

如果希望私钥用对称算法进行加密,可以加上-aes128 (-aes192、-aes256),不建议使用DES\3DES\SEED:
$ openssl genrsa -aes128 -out fd.key

查看RSA密钥

$ openssl rsa -text -in fd.key

如果不想输出key,可以用:
$ openssl rsa -text -in fd.key -noout

如果只是想看公钥,可用:
$ openssl rsa -pubout -in fd.key

创建ECDSA密钥

重要:如果可以,放弃RSA,选ECDSA。
目前在TLS web的应用上,主要考虑老古董浏览器的兼容性问题,会用RSA和ECDSA并存的方案。但如果条件允许,最好选择ECDSA。

RSA在2048位的密钥下,性能比ECDSA密钥差,且增加RSA长度增加的性能损耗不是线性的。256位的ECDSA密钥有128密钥用于安全加密上,相对而言,2048位的RSA密钥只有112位是真正用于安全加密的。
区块链项目Hyperledger Fabric里,默认也是用ECDSA secp256r1。

$ openssl ecparam -genkey -name secp256r1 | openssl ec -out ec.key 

同样如果希望用对称算法进行加密,可以用:
$ openssl ecparam -genkey -name secp256r1 | openssl ec -out ec.key -aes128

每个密钥,都要选定一个命名曲线,这里用的是 secp256rc(prime256v1),可以用:
$ openssl ecparam -list_curves 获取支持的曲线表。

查看ECDSA密钥

$ openssl ec -text -in ec.key

如果不想输出key,可以用:
$ openssl ec -text -in ec.key -noout

如果只是想看公钥,可用:
$ openssl ec -pubout -in ec.key

是不是感觉和查看RSA密钥的手法一样?其实代码我也是直接copy的。

创建证书签名申请(csr)

$ openssl req -new -key fd.key -out fd.csr

可以用:
$openssl req -text -in fd.csr -noout 检查下你的CSR文件。

如果你想更新一张证书(crt)且不想改变里面的信息,可以用:
openssl x509 -x509toreq -in fd.crt -out fd.csr -signkey fd.key

创建证书(自签名)

当你有了粮票CSR,就可以创建证书了:

$ openssl x509 -req -days 365 -in fd.csr -signkey fd.key -out fd.crt

没办法,因为是自己给自己盖章,所以这里的-signkey只能用自己的密钥了。

如果你不想扭扭捏捏,先生成csr,在创建crt,这里有一口吞大胖子命令:
$ openssl req -new -x509 -days 365 -key fd.key -out fd.crt

还不过瘾,可以加上-subj直接跳过交互提示:

$ openssl req -new -x509 -days 365 -key fd.key -out fd.crt -subj "/C=CN/L=xxxx/O=xxxxx/CN=xxxxx"

检查证书

$ openssl x509 -text -in fd.crt -noout

总结上,检查(查看)证书:
$ openssl {op} -text -in xxx -noout

op 说明
rsa 检查rsa证书
ec 检查ECDSA证书
req 检查证书签名申请CSR
x509 检查证书

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions