OpenSSL公私钥证书哪些事儿
OpenSSL 教程
2022-07-30 09:41:34
sizaif
基础知识
.crt .pem .key
PEM - Privacy Enhanced Mail 以“-----BEGIN…”开头,“-----END…”结尾,内容是 BASE64
编码。
PEM格式是证书颁发机构颁发证书的最常见格式.PEM证书通常具有扩展名,例**.pem,.crt,.cer和.key**。它们是Base64编码的ASCII文件,包含“----- BEGIN CERTIFICATE -----”和“----- END CERTIFICATE -----”语句。服务器证书,中间证书和私钥都可以放入PEM格式。
openssl x509 -in certificate.pem -text -noout #pem
DER - Distinguished Encoding Rules
DER格式只是证书的二进制形式,而不是ASCII PEM格式。它有时会有**.der的文件扩展名,但它的文件扩展名通常是.cer所以判断DER .cer文件和PEM .cer文件之间区别的唯一方法是在文本编辑器中打开它并查找BEGIN / END语句。所有类型的证书和私钥都可以用DER格式编码。DER通常与Java平台一起使用,**Java 和 Windows 服务器偏向于使用这种编码格式。SSL转换器只能将证书转换为DER格式
openssl x509 -in certificate.der -inform der -text -noout #der
CRT 是 certificate 的三个字母,其实还是证书的意思。常见于 UNIX 系统,有可能是 PEM 编码,也有可能是 DER 编码,大多数应该是 PEM 编码,相信你已经知道怎么辨别。
CER 还是 certificate,还是证书。常见于 Windows 系统,同样的可能是 PEM 编码,也可能是 DER 编码,大多数应该是 DER 编码。
KEY 通常用来存放一个公钥或者私钥,并非 X.509 证书。编码同样的,可能是 PEM,也可能是 DER
openssl rsa -in mykey.key -text -noout # pem
openssl rsa -in mykey.key -text -noout -inform der # der
CSR Certificate,Signing Request,即证书签名请求。这个并不是证书,而是向权威证书颁发机构获得签名证书的申请,其核心内容是一个公钥(当然还附带了一些别的信息)。在生成这个申请的时候,同时也会生成一个私钥,私钥要自己保管好。做过 iOS APP 的朋友都应该知道是,怎么向苹果申请开发者证书的吧。
openssl req -noout -text -in my.csr #
查看帮助
openssl help
genrsa
平时主要用来生成私钥,选择使用的算法、对称加密密码和私钥长度来生成私钥
openssl genrsa [args] [numbits]
# 【更多参数查看:openssl genrsa -help】
args1 对生成的私钥文件是否要使用加密算法进行对称加密: -des : CBC模式的DES加密 -des3 : CBC模式的3DES加密 -aes128 : CBC模式的AES128加密 -aes192 : CBC模式的AES192加密 -aes256 : CBC模式的AES256加密
args2 对称加密密码-passout passwords其中passwords为对称加密(des、3des、aes)的密码(使用这个参数就省去了console交互提示输入密码的环节)
args3 输出文件-out file : 输出证书私钥文件
[numbits]: 密钥长度,理解为私钥长度
生成一个2048位的RSA私钥,并用des3加密(密码为123456),保存为server.key文件
openssl genrsa -des3 -passout pass:123456 -out server.key 2048
// -des3 是第一个参数args1;
// -passout pass:123456 是第二个参数写法 args2
// -out server.key 第三个参数args3;
// 2048 最后一个[numbits]参数
req
req
的基本功能主要有两个:生成证书请求和生成自签名证书,当然这并不是其全部功能,但是这两个最为常见;
常见使用方法:
openssl req [args] outfile
主要参数:【更多参数查看:openssl req -help】
args1 是输入输入文件格式:-inform arg-inform DER 使用输入文件格式为DER-inform PEM 使用输入文件格式为PEM
args2 输出文件格式:-outform arg -outform DER 使用输出文件格式为DER-outform PEM 使用输出文件格式为PEM
args3 是待处理文件 -in inputfilepath
args4 待输出文件-out outputfilepath
args5 用于签名待生成的请求证书的私钥文件的解密密码-passin passwords
args6 用于签名待生成的请求证书的私钥文件-key file
args7指定输入密钥的编码格式 -keyform arg -keyform DER-keyform NET-keyform PEM
args8 生成新的证书请求 -newargs9输出一个X509格式的证书,签名证书时使用 -x509
args10使用X509签名证书的有效时间 -days // -days 3650 有效期10年args11生成一个bits长度的RSA私钥文件,用于签发【生成私钥、并生成自签名证书】 -newkey rsa:bits args12设置HASH算法-[digest]【生成私钥指定的hash摘要算法】-md5-sha1 // 高版本浏览器开始不信任这种算法-md2-mdc2-md4
args13指定openssl配置文件,很多内容不容易通过参数配置,可以指定配置文件-config filepath
args14 显示格式txt【用于查看证书、私钥信息】-text
使用的案例:利用私钥生成证书请求csr
openssl req -new -key server.key -out server.csr
使用案例:利用私钥生成自签名证书
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
生成私钥
genrsa genkey这两种方法都创建RSA密钥,尽管格式不同。genrsa输出pkcs# 1格式的RSA密钥,而genpkey输出一个更通用的容器,可以管理不同类型的密钥(RSA、DSA、DH、EC等)
genrsa
openssl genrsa [args] [numbits] args1 对生成的私钥文件是否要使用加密算法进行对称加密: -des : CBC模式的DES加密 -des3 : CBC模式的3DES加密 -aes128 : CBC模式的AES128加密 -aes192 : CBC模式的AES192加密 -aes256 : CBC模式的AES256加密
args2 对称加密密码-passout passwords其中passwords为对称加密(des、3des、aes)的密码(使用这个参数就省去了console交互提示输入密码的环节)
args3 输出文件-out file : 输出证书私钥文件
[numbits]: 密钥长度,理解为私钥长度 Usage: genrsa [options]
Valid options are:-help Display this summary-3 Use 3 for the E value-F4 Use F4 (0x10001) for the E value-f4 Use F4 (0x10001) for the E value-out outfile Output the key to specified file-rand val Load the file(s) into the random number generator-writerand outfile Write random data to the specified file-passout val Output file pass phrase source-* Encrypt the output with any supported cipher-engine val Use engine, possibly a hardware device-primes +int Specify number of primes
例如生成一个2048位的RSA私钥,并用des3加密(密码为123456),保存为rsa_private_key.pem
文件
openssl genrsa -des3 -passout pass:123456 -out rsa_private_key.pem 2048
// -des3 是第一个参数args1;
// -passout pass:123456 是第二个参数写法 args2
// -out server.key 第三个参数args3;
// 2048 最后一个[numbits]参数
私钥转⾮加密
openssl rsa -in rsa_private_key.pem -passin pass:123456 -out rsa_private.key
私钥转加密
openssl rsa -in rsa_private.key -aes256 -passout pass:111111 -out rsa_aes_private.key
私钥PEM转DER
openssl rsa -in rsa_private.key -outform der-out rsa_aes_private.der
genkey
genpkey命令用于产生各种密钥(RSA、DSA、DH、EC等)的私钥
Usage: genpkey [options]
Valid options are:-help Display this summary-out outfile Output file-outform PEM|DER output format (DER or PEM)-pass val Output file pass phrase source-paramfile infile Parameters file-algorithm val The public key algorithm-pkeyopt val Set the public key algorithm option as opt:value-genparam Generate parameters, not key-text Print the in text-* Cipher to use to encrypt the key-engine val Use engine, possibly a hardware device
Order of options may be important! See the documentation.
生成DSA算法的私钥
openssl genpkey -genparam -algorithm DSA -out dsap2048.pem -pkeyopt dsa_paramgen_bits:2048
生成RSA算法的私钥
openssl genpkey -algorithm RSA -out rsa2048_key.pem -pkeyopt rsa_keygen_bits:2048
生成公钥
Usage: rsa [options]
Valid options are:-help Display this summary-inform format Input format, one of DER PEM-outform format Output format, one of DER PEM PVK-in val Input file-out outfile Output file-pubin Expect a public key in input file-pubout Output a public key-passout val Output file pass phrase source-passin val Input file pass phrase source-RSAPublicKey_in Input is an RSAPublicKey-RSAPublicKey_out Output is an RSAPublicKey-noout Don't print key out-text Print the key in text-modulus Print the RSA key modulus-check Verify key consistency-* Any supported cipher-pvk-strong Enable 'Strong' PVK encoding level (default)-pvk-weak Enable 'Weak' PVK encoding level-pvk-none Don't enforce PVK encoding-engine val Use engine, possibly a hardware device
公钥由私钥运算生成
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
生成⾃签名证书
⽣成 RSA 私钥和⾃签名证书
openssl req -newkey rsa:2048-nodes -keyout rsa_private.key -x509 -days 365-out cert.crt
# req是证书请求的⼦命令,
# -newkey rsa:2048 -keyout private_key.pem 表⽰⽣成私钥(PKCS8格式),
# -nodes 表⽰私钥不加密,若不带参数将提⽰输⼊密码;
# -x509表⽰输出证书,
# -days365 为有效期,此后根据提⽰输⼊证书拥有者信息;
# 若执⾏⾃动输⼊,可使⽤-subj选项:
openssl req -newkey rsa:2048-nodes -keyout rsa_private.key -x509 -days 365-out cert.crt -subj "/C=CN/ST=GD/L=SZ/O=vihoo/OU=dev/CN=vivo.com/emailAddress=yy@vivo.com"
使⽤已有RSA 私钥⽣成⾃签名证书
openssl req -key rsa_private.key -new -x509 -days 365 -out cert.crt
# -new 指⽣成证书请求 加上-x509 表⽰直接输出证书
# -key 指定私钥⽂件,其余选项与上述命令相同
⽣成签名请求及CA 签名
使⽤ RSA私钥⽣成 CSR 签名请求
openssl genrsa -aes256 -passout pass:111111 -out server.key 2048
openssl req -new -key server.key -out server.csr
此后输⼊密码、server证书信息完成,也可以命令⾏指定各类参数
openssl req -new-key server.key -passin pass:111111-out server.csr -subj "/C=CN/ST=GD/L=SZ/O=vihoo/OU=dev/CN=vivo.com/emailAddress=yy@vivo.com"
此时⽣成的 csr签名请求⽂件可提交⾄ CA进⾏签发
使⽤ CA 证书及CA密钥 对请求签发证书进⾏签发,⽣成 x509证书
openssl x509 -req -days 3650-in server.csr -CA ca.crt -CAkey ca.key -passin pass:111111-CAcreateserial -out server.crt
其中 CAxxx 选项⽤于指定CA 参数输⼊
s_client 与 s_server 相互通信
TODO:
Code
#!/bin/bash# 生成DES算法私钥 并生成自签名证书
for len in 512 1024 2048 3072
doopenssl genpkey -genparam -algorithm DSA -out dsap${len}.pem -pkeyopt dsa_paramgen_bits:${len}openssl genpkey -paramfile dsap${len}.pem -out dsa${len}_key.pemopenssl req -key dsa${len}_key.pem -new -x509 -days 2000 -out dsa${len}_cert.pem -subj "/CN=tls-attacker.com"
done
# 生成RSA算法私钥 并生成自签名证书
for len in 512 1024 2048 4096
doopenssl genpkey -algorithm RSA -out rsa${len}_key.pem -pkeyopt rsa_keygen_bits:${len} openssl req -key rsa${len}_key.pem -new -x509 -days 2000 -out rsa${len}_cert.pem -subj "/CN=tls-attacker.com"
done
# 生成EC椭圆算法的私钥 并生成自签名证书
for named_curve in secp160k1 secp160r1 secp160r2 secp192k1 secp224k1 secp224r1 secp256k1 secp384r1 secp521r1 sect163k1 sect163r1 sect163r2 sect193r1 sect193r2 sect233k1 sect233r1 sect239k1 sect283k1 sect283r1 sect409k1 sect409r1 sect571k1 sect571r1
doopenssl ecparam -name ${named_curve} -genkey -out ec_${named_curve}_key.pemopenssl req -key ec_${named_curve}_key.pem -new -x509 -days 2000 -out ec_${named_curve}_cert.pem -subj "/CN=tls-attacker.com"
done#
openssl req -x509 -new -nodes -extensions v3_ca -key rsa2048_key.pem -days 2000 -out rsa_ca.pem -sha256 -subj "/CN=TLS-Attacker CA"
openssl req -x509 -new -nodes -extensions v3_ca -key dsa1024_key.pem -days 2000 -out dsa_ca.pem -sha256 -subj "/CN=TLS-Attacker CA"# 生成 dh参数 dhparam.pem
openssl dhparam -out dhparam.pem 1024
# 根据dh参数 生成 dh私钥
openssl genpkey -paramfile dhparam.pem -out dhkey.pem
# pkey命令用于处理公钥或私钥,
# 根据dh私钥生成dh公钥
openssl pkey -in dhkey.pem -pubout -out dhpubkey.pem
# 使用 rsa2048_key.pem 生成自签名证书 rsa.csr
openssl req -new -key rsa2048_key.pem -out rsa.csr -subj "/CN=tls-attacker.com"
openssl x509 -req -in rsa.csr -CAkey rsa2048_key.pem -CA rsa_ca.pem -force_pubkey dhpubkey.pem -outrsa_dhcert.pem -CAcreateserial
openssl req -new -key dsa1024_key.pem -out dsa.csr -subj "/CN=tls-attacker.com"
openssl x509 -req -in dsa.csr -CAkey dsa1024_key.pem -CA dsa_ca.pem -force_pubkey dhpubkey.pem -out
dsa_dhcert.pem -CAcreateserialfor named_curve in secp160k1 secp160r1 secp160r2 secp192k1 secp224k1 secp224r1 secp256k1 secp384r1 secp521r1 sect163k1 sect163r1 sect163r2 sect193r1 sect193r2 sect233k1 sect233r1 sect239k1 sect283k1 sect283r1 sect409k1 sect409r1 sect571k1 sect571r1
doopenssl ecparam -out ec_param_${named_curve}.pem -name ${named_curve}openssl genpkey -paramfile ec_param_${named_curve}.pem -out ec_rsa_private_key_${named_curve}.pemopenssl pkey -in ec_rsa_private_key_${named_curve}.pem -pubout -out ec_rsa_public_key_${named_curve}.pemopenssl x509 -req -in rsa.csr -CAkey rsa2048_key.pem -CA rsa_ca.pem -force_pubkey ec_rsa_public_key_${named_curve}.pem -out ec_rsa_cert_${named_curve}.pem -CAcreateserial
done
OpenSSL公私钥证书哪些事儿相关推荐
- KeyStore加载PublicKey/PrivateKey(公/私钥)证书
开发过程中,对于签名和验签的问题,相信大家没少见过.很多时候,我们只是拿来就用,根本没留意里面的逻辑: 要么就是项目现有的签名和验签逻辑,要么就是拿demo里面的代码然后集成到项目中去,直接使用. 很 ...
- OpenSSL公钥 私钥 RSA
获取私钥资源 $config = ["digest_alg" => "sha512",//摘要算法或签名哈希算法"private_key_bit ...
- OpenSSL生成 SM2公私钥
OpenSSL生成 SM2公私钥 当前形势 国密局字[2011]50号"关于做好公钥密码算法升级工作的通知", 要求新投入运行并使用公钥密码的信息系统,应使用SM2椭圆曲线密码算法 ...
- RSA公私钥格式分析及其在Java和Openssl之间的转换方法
文章目录 PKCS#1和PKCS#8 X.509公钥证书 ASN.1抽象语法标记 DER和PEM编码 OID对象标识符 用openssl命令生成PKCS1#格式的RSA密钥对 生成私钥 从私钥中导出公 ...
- java中使用openssl生成的rsa公私钥进行数据加解密_使用openssl生成RSA公钥和私钥对...
在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互界面 ...
- Java中使用OpenSSL生成的RSA公私钥进行数据加解密
本文出处:http://blog.csdn.net/chaijunkun/article/details/7275632,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在 ...
- 使用OpenSSL生成私钥(Private Key)以及根据Private Key创建证书
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 公钥和私 ...
- 公私钥,数字证书,https
1.密钥对,在非对称加密技术中,有两种密钥,分为私钥和公钥,私钥是密钥对所有者持有,不可公布,公钥是密钥对持有者公布给他人的. 2.公钥,公钥用来给数据加密,用公钥加密的数据只能使用私钥解密. 3.私 ...
- java pfx提取私钥加签,详解pfx证书提取公私钥的方法
什么是pfx 公钥加密技术12号标准. 公钥加密技术12号标准(Public Key Cryptography Standards #12,PKCS#12)为存储和传输用户或服务器私钥.公钥和证书指定 ...
最新文章
- oracle分组聚合查询,Oracle中分组查询group by用法规则解析
- 确定关键质量的5大原则
- 监控主机安装需要材料
- sync - 清空文件系统缓冲区
- java hashmap 的api_JAVA基础--JAVA API集合框架(ArrayList、HashSet、HashMap使用)
- .net core 常见设计模式-IChangeToken
- python progressbar 倒计时_Python使用progressbar模块实现的显示进度条功能
- Dissecting the GZIP format
- 详细的设计文档该怎么写?请注意这些地方...
- 对日ODC与欧美ODC技术分析
- linux git rabit,Linux 安装 RabbitMQ
- 论文笔记 Weakly Supervised Deep Detection Networks - CVPR 2016
- 大数据矩阵计算基础(二):R、Excel、Matlab中矩阵操作
- 我跨过山和大海,穿过人山人海,只为寻找到你
- 十分钟设置android状态栏一体化开源工程推荐
- 树莓派WEB服务器(Boa)CGI编程入门
- js 实现繁体和简体之间的转换
- htonl ntohl htons ntohs
- AI时代的大门已经打开,Tesra超算网络将加速这个进程!
- TryHackMe学习笔记-Windows PrivEsc Arena