当前位置: 首页 > news >正文

openssl req 详解

一、openssl req

该命令用于创建和处理PKCS#10格式的证书请求(certificate requests CSRs),也可以用来创建自签名证书( self-signed certificates)来当作根证书(root CAs)使用

-new 该选项用来生成一个新的证书请求(certificate request),它将提示用户输入相关的字段值。
如果没有指定-key选项,则会使用配置文件中的默认信息自动生成一个私钥以及证书请求文件;或者可以指定 -newkey和 -pkeyopt 两个选项用来指定生成的私钥类型

-out filename 指定输出文件名,如果不指定则输出到 标准输出

-key filename|uri 生成一个证书请求或者签名一个证书需要使用到私钥,该选项

-in filename 这指定了要从中读取证书请求的输入文件名。仅当未指定创建选项(-new 或 -newkey 或 -precert)时,才会只读取请求。

-x509 指定此选项的话,输出的就是一个证书文件而不是证书请求文件

-keyout filename 指定自动生成的私钥文件名,或者从-key中指定的文件名,如果 -keyout 和 -key 选项都没有被提供,则会使用配置文件中的default_keyfile选项,如果上述选项都没有配置,则会输出到标准输出

-config filename 指定配置文件路径

-CA filename|uri 指定 “CA” 证书用于对其他证书进行签名(即对证书请求文件的相关内容进行签名生成一个新的证书),使用此选项,意味着包含了-x509选项

-CAkey filename|uri 使用CA证书对其他证书签名的时候需要指定该CA证书的私钥

-inform DER|PEM 指定输入CSR文件的编码格式,默认情况是PEM格式

-outform DER|PEM 指定输出CSR文件的编码格式,默认情况下不指定

-text 以text的格式输出CSR文件

-pubkey输出CSR文件中对应的公钥信息

-passout arg 指定输出文件的密码,一般用于指定生成key的密码

-passin arg 用于指定输入私钥文件或者证书、证书请求的密码

-newkey arg 当CSR生成命令没有使用-key指定一个具体的私钥的时候,会使用默认配置生成一个私钥,但是也可以使用-newkey arg选项自定义输出一个私钥
该选项同时包含了-new选项去生成一个CSR文件或者证书文件(证书文件需要同时指定-x509选项)。
arg选项如下:

-config filename 用于指定配置文件

-section name 指定配置文件中的section,默认式req

-verify 用于验证CSR自签名是否能成功,如果失败立即退出,并且不会打印信息,如果成功会打印如下字样:
Certificate request self-signature verify OK

-subj arg 用于设置证书请求文件的主题项(subject) -subj “/C=GB/CN=foo”

-not_before date 设置证书的生效时间 当-x509选项被指定的时候,该选项才会被允许使用,格式是 YYMMDDHHMMSSZ或者YYYYMMDDHHMMSSZ 或者 today

-not_after date 设置证书的到期时间 当-x509选项被指定的时候,该选项才会被允许使用,格式是 YYMMDDHHMMSSZ或者YYYYMMDDHHMMSSZ 或者 today

-days n 用于指定证书从今天开始的到期天数,n是一个正整数,默认是30天;当设置此值的时候不需要关注not_before,因为是从今天开始;当not_after此值被设置的时候,会覆盖掉-days选项的值,即-not_after 与 -days同时存在的时候, -not_after生效。

二、命令实例详解

  • 1、生成一个CSR文件,并且同时生成一个私钥文件
openssl req -new -keyout myprivkey.pem  -out mycsr.pem

上述命令再生成csr文件的同时也会生成一个私钥,一般情况下私钥需要使用加密算法+密码进行加密,所以会有提示让你输入密码,如果不想交互式的输入密码,可以使用-passout pass:mima选项

Enter PEM pass phrase:Verifying - Enter PEM pass phrase:

在默认配置中,也会要求对输出的CSR文件进行加密,所以也会提升输入密码,如果不想要密码,可以再配置文件中进行修改

A challenge password []:
  • 2、使用存在的证书文件生成一个证书请求文件
 openssl req -new -key myprivkey1.pem  -out mycsr1.pem

如果私钥文件有密码,则会交互式的输入密码,如果不想交互式的输入密码,可以使用-passin pass:mima选项输入密码

  • 3、生成一个证书,该证书是自签名根证书( self-signed root certificate)
openssl req -new -keyout myprivkey1.pem  -x509 -out mycertificate.pem

如果想要生成一个证书文件,必须要指定-x509 选项,密码以及私钥策略同上

  • 4、检查和验证证书请求文件的正确性
 openssl req -in .\mycsr.pem -verif
  • 5、使用CA证书签名CSR文件,生成一个对应的新证书以及生成一个对应的私钥
openssl req -CA mycertificate.pem  -CAkey myprivkey.pem  -out testcert.pem

上述命令会自动生成一个私钥,以及由CA证书签名的证书

-CA选项用于指定CA根证书,CAkey用于指定CA对应的私钥,-CA选项通常包含-x509选项,而-x509又包含-new选项,所以上述命令有自动生成的含义

  • 6、使用CA证书签名CSR文件,生成一个对应的新证书
openssl req -CA mycertificate.pem  -CAkey myprivkey.pem -in mycsr.pem -out testcert2.pem

上述命令对已有的CSR文件进行签名,如果不指定-in选项,会自动(如果不指定in选项,会默认包含-new选项)生成一个私钥(该私钥需要交互式输入密码,如果不想交互式的输入密码需要指定-passout选项)以及对应的证书文件

三、配置文件

1、req的配置文件,用于存储一些配置字段以及需要交互式输入的字段

[ req ]
default_bits           = 2048
default_keyfile        = privkey.pem
distinguished_name     = req_distinguished_name
attributes             = req_attributes
req_extensions         = v3_cadirstring_type = nobmp[ req_distinguished_name ]
countryName                    = Country Name (2 letter code)
countryName_default            = AU
countryName_min                = 2
countryName_max                = 2localityName                   = Locality Name (eg, city)organizationalUnitName         = Organizational Unit Name (eg, section)commonName                     = Common Name (eg, YOUR name)
commonName_max                 = 64emailAddress                   = Email Address
emailAddress_max               = 40[ req_attributes ]
challengePassword              = A challenge password
challengePassword_min          = 4
challengePassword_max          = 20[ v3_ca ]subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always
basicConstraints = critical, CA:true

2、默认配置文件示例

[ req ]
default_bits           = 2048
default_keyfile        = keyfile.pem
distinguished_name     = req_distinguished_name
attributes             = req_attributes
prompt                 = no
output_password        = mypass[ req_distinguished_name ]
C                      = GB
ST                     = Test State or Province
L                      = Test Locality
O                      = Organization Name
OU                     = Organizational Unit Name
CN                     = Common Name
emailAddress           = test@email.address[ req_attributes ]
challengePassword              = A challenge password

注意

一个证书请求文件一般需要包含一个公钥以及如下信息:

Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:

但是在实际命令中通常是需要输入一个私钥,然后从私钥中提取公钥以及其他相关信息再配合上述信息共同组成证书请求文件。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • c++——map和set
  • 解决vscode+UE5中vscode无法识别头文件,无法函数无法跳转,也无法自动补全的问题。
  • 科研绘图系列:R语言和弦图 (Chord diagram)
  • 自动驾驶(八十六)---------通信中间件Fdbus
  • C#测试控制台程序调用Quartz.NET的基本用法
  • OpenCV 卷积 Robert算子,Laplance算子,Sobel算子,Canny边缘检测原理
  • 【DVWA靶场】Web安全之(布尔值/延时型)SQL盲注(超详细教程)
  • Android RSA 加解密
  • stm32F1xx时钟配置分析总结
  • linux快速入门-学习笔记
  • Adobe“加速”创意人士开启设计新篇章
  • MongoDB教程(二十二):MongoDB固定集合
  • [k8s源码]8.deltaFIFO
  • Vue Router基础
  • BSV区块链在人工智能时代的数字化转型中的角色
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 10个确保微服务与容器安全的最佳实践
  • hadoop集群管理系统搭建规划说明
  • JavaScript-Array类型
  • Java比较器对数组,集合排序
  • mysql_config not found
  • npx命令介绍
  • TCP拥塞控制
  • Windows Containers 大冒险: 容器网络
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 构造函数(constructor)与原型链(prototype)关系
  • 微信开源mars源码分析1—上层samples分析
  • 想写好前端,先练好内功
  • 小程序开发中的那些坑
  • 用 Swift 编写面向协议的视图
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ## 基础知识
  • #### go map 底层结构 ####
  • #1015 : KMP算法
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (1)(1.11) SiK Radio v2(一)
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (3)nginx 配置(nginx.conf)
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (C语言)逆序输出字符串
  • (floyd+补集) poj 3275
  • (二)JAVA使用POI操作excel
  • (分布式缓存)Redis分片集群
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (区间dp) (经典例题) 石子合并
  • (十七)Flink 容错机制
  • (十一)手动添加用户和文件的特殊权限
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .gitignore文件—git忽略文件
  • .net core 控制台应用程序读取配置文件app.config
  • .NET Framework 3.5安装教程
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .net和jar包windows服务部署
  • .NET简谈设计模式之(单件模式)