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公私钥证书哪些事儿相关推荐

  1. KeyStore加载PublicKey/PrivateKey(公/私钥)证书

    开发过程中,对于签名和验签的问题,相信大家没少见过.很多时候,我们只是拿来就用,根本没留意里面的逻辑: 要么就是项目现有的签名和验签逻辑,要么就是拿demo里面的代码然后集成到项目中去,直接使用. 很 ...

  2. OpenSSL公钥 私钥 RSA

    获取私钥资源 $config = ["digest_alg" => "sha512",//摘要算法或签名哈希算法"private_key_bit ...

  3. OpenSSL生成 SM2公私钥

    OpenSSL生成 SM2公私钥 当前形势 国密局字[2011]50号"关于做好公钥密码算法升级工作的通知", 要求新投入运行并使用公钥密码的信息系统,应使用SM2椭圆曲线密码算法 ...

  4. RSA公私钥格式分析及其在Java和Openssl之间的转换方法

    文章目录 PKCS#1和PKCS#8 X.509公钥证书 ASN.1抽象语法标记 DER和PEM编码 OID对象标识符 用openssl命令生成PKCS1#格式的RSA密钥对 生成私钥 从私钥中导出公 ...

  5. java中使用openssl生成的rsa公私钥进行数据加解密_使用openssl生成RSA公钥和私钥对...

    在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互界面 ...

  6. Java中使用OpenSSL生成的RSA公私钥进行数据加解密

    本文出处:http://blog.csdn.net/chaijunkun/article/details/7275632,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在 ...

  7. 使用OpenSSL生成私钥(Private Key)以及根据Private Key创建证书

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 公钥和私 ...

  8. 公私钥,数字证书,https

    1.密钥对,在非对称加密技术中,有两种密钥,分为私钥和公钥,私钥是密钥对所有者持有,不可公布,公钥是密钥对持有者公布给他人的. 2.公钥,公钥用来给数据加密,用公钥加密的数据只能使用私钥解密. 3.私 ...

  9. java pfx提取私钥加签,详解pfx证书提取公私钥的方法

    什么是pfx 公钥加密技术12号标准. 公钥加密技术12号标准(Public Key Cryptography Standards #12,PKCS#12)为存储和传输用户或服务器私钥.公钥和证书指定 ...

最新文章

  1. oracle分组聚合查询,Oracle中分组查询group by用法规则解析
  2. 确定关键质量的5大原则
  3. 监控主机安装需要材料
  4. sync - 清空文件系统缓冲区
  5. java hashmap 的api_JAVA基础--JAVA API集合框架(ArrayList、HashSet、HashMap使用)
  6. .net core 常见设计模式-IChangeToken
  7. python progressbar 倒计时_Python使用progressbar模块实现的显示进度条功能
  8. Dissecting the GZIP format
  9. 详细的设计文档该怎么写?请注意这些地方...
  10. 对日ODC与欧美ODC技术分析
  11. linux git rabit,Linux 安装 RabbitMQ
  12. 论文笔记 Weakly Supervised Deep Detection Networks - CVPR 2016
  13. 大数据矩阵计算基础(二):R、Excel、Matlab中矩阵操作
  14. 我跨过山和大海,穿过人山人海,只为寻找到你
  15. 十分钟设置android状态栏一体化开源工程推荐
  16. 树莓派WEB服务器(Boa)CGI编程入门
  17. js 实现繁体和简体之间的转换
  18. htonl ntohl htons ntohs
  19. AI时代的大门已经打开,Tesra超算网络将加速这个进程!
  20. TryHackMe学习笔记-Windows PrivEsc Arena

热门文章

  1. PTA乙级 1064 朋友数——20分
  2. 读书和学习本为一体,行和知相得益彰
  3. JAVA调用Matlab代码(MATLAB 2014a)
  4. 基于Newban的Nancyj字体Email签名工具
  5. 四级真题图表作文计算机,大学英语四级考试---图表作文写作方法.ppt
  6. 0x01中0x表示的含义
  7. 我投了份简历,接到了十八个骚扰电话
  8. jquery ul li左右拖动
  9. C#实现winform窗体拖动事件
  10. Grizzly Release Notes