使用OpenSSL工具制作X.509证书的方法及其注意事项总结
如何使用OpenSSL工具生成根证书与应用证书
// 生成顶级CA的公钥证书和私钥文件,有效期10年(RSA 1024bits,默认)
openssl req -new -x509 -days 3650 -keyout CARoot1024.key -out CARoot1024.crt
// 为顶级CA的私钥文件去除保护口令
openssl rsa -in CARoot1024.key -out CARoot1024.key // 生成顶级CA的公钥证书和私钥文件,有效期15年(RSA 2048bits,指定)
openssl req -newkey rsa:2048 -x509 -days 5480 -keyout CARoot2048.key -out CARoot2048.crt
// 为顶级CA的私钥文件去除保护口令
openssl rsa -in CARoot2048.key -out CARoot2048.key // 为应用证书/中级证书生成私钥文件
openssl genrsa -out app.key 2048
// 根据私钥文件,为应用证书/中级证书生成 csr 文件(证书请求文件)
openssl req -new -key app.key -out app.csr
// 使用CA的公私钥文件给 csr 文件签名,生成应用证书,有效期5年
openssl ca -in app.csr -out app.crt -cert CARoot1024.crt -keyfile CARoot1024.key -days 1826 -policy policy_anything
// 使用CA的公私钥文件给 csr 文件签名,生成中级证书,有效期5年
openssl ca -extensions v3_ca -in app.csr -out app.crt -cert CARoot1024.crt -keyfile CARoot1024.key -days 1826 -policy policy_anything
以上是生成根证书与应用证书过程中要用到的所有命令,根据生成目标不同,分为三组。其中,前面两组都用于生成自签名的顶级CA(区别只在于密钥长度不同),实际应用中只需根据需求选择一组即可。
最后一组用于生成非自签名的证书,包括中级证书与应用证书。所谓中级证书,是具有继续颁发下级证书权限的子CA,而本文中所说的应用证书,特指不能用来继续颁发下级证书,只能用来证明个体身份的证书。顶级CA在签发二者的时候,只是多少一个 -extensions v3_ca 选项的区别,这个选项赋予被签发的证书继续签发下级证书的权力。
二、各步详解
2.1 生成自签名根证书(即顶级CA)
典型示例:openssl req -new-x509 -days5480 -keyoutCA.key -outCA.crt
[1] 命令选项和参数解读
示例中,各选项(及参数)的意义如下:
req 使用openssl的req子命令
-new 生成新的证书请求
-x509 生成自签名证书
-days 5480 自签名证书的有效期5480天(15年)【仅当使用了 -x509 选项后有效】
-keyout CA.key 私钥文件名指定为CA.key【若为运行前就已有的私钥文件且原名不是CA.key,则改名为CA.key;否则新生成的私钥文件命名为CA.key】
-out CA.crt 指定输出所生成自签名证书的信息到文件,且文件名为CA.crt【建议不要省略】
其中,-days,-keyout 两个选项可以省略,省略的话使用默认值,有效期默认为 30 天【由程序内部在变量初始化的时候指定,与配置文件无关】,私钥文件名的默认值由配置文件 openssl.cnf 中相关条目指定,没改过的话为 privkey.pem。
选项 -out 若是省略的话,openssl不会以文件形式输出生成的 证书/证书请求,而是会默认将文件的信息直接打印到屏幕上,这在大多数情况下,是不符合我们要求的。所以建议这个选项最好不要省略!
req子命令可以通过 -key 选项为证书请求指定使用一个已存在的私钥文件。但在示例中的情况下,虽然使用了-new 和 -x509两个选项,但没有使用 -key 选项,这时,req子命令会自动为自签名证书生成一个RSA私钥,密钥长度的默认值由配置文件 openssl.cnf 中的相关条目指定,没改过的话为 1024 bits。
[2] 关于私钥文件加密口令的指定
运行中会提示输入加密口令,如下:
writing new private key to 'CA.key'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
此口令用于加密私钥文件 CA.key 中的私钥信息,如果不想在运行过程中还要输入加密口令,则可以使用选项 -passout 在命令中直接指定。选项 -passout 的使用形式为:
-passoutarg
其中,arg是选项 -passout 的参数,其格式有多种,详参《OpenSSL官方文档》中关于"PASS_PHRASE_ARGUMENTS"的介绍。
本小节典型示例中的命令,可以用选项 -passout 改造如下:
openssl req -new-x509 -days5480 -keyoutCA.key -out CA.crt-passoutpass:1314
由于Linux系统中可以使用history命令查看历史指令记录,所以出于安全方面的考量,一般如非必要,不建议在命令中直接指定口令。这与mysql登录的时候不在 -p 选项里直接指定登录口令的原因是一致的。
[3] 关于证书请求文件中的DN字段
运行中会提示输入一些 Distinguished Name fields,即证书的识别名信息字段,简称为DN字段,如下:
You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:US
State or Province Name (full name) [Berkshire]:California
Locality Name (eg, city) [Newbury]:
Organization Name (eg, company) [My Company Ltd]:GeoAuth Inc.
Organizational Unit Name (eg, section) []:.
Common Name (eg, your name or your server's hostname) []:Authentication Global Root
Email Address []:.
这些DN字段大部分有默认值,默认值由配置文件 openssl.cnf中相关条目指定。如要在某一个DN字段使用默认值,则无需输入任何信息,直接点击"Enter"键;如果确实某个DN字段的值要置为空,则输入一个 '.' 后,点击"Enter"键。
这些DN字段主要是拿来识别证书持有者身份的,下表是关于它们的缩写、说明和一些填写说明。【此部分参考了互动百科的SSL条目】
转载于:https://www.cnblogs.com/syuee/p/6482687.html
使用OpenSSL工具制作X.509证书的方法及其注意事项总结相关推荐
- 使用certbot工具制作免费https证书
使用certbot工具制作免费https证书 1 概述 为站点添加https是优化提升的一部分工作,本文介绍使用certboot工具制作免费的https证书. https面向的对象:域名 2 资源说明 ...
- win10用html文件做壁纸,利用win10自带工具制作动态壁纸的简单方法
微软在最强大操作系统利用win10自带工具制作动态壁纸的简单方法的详细介绍. 利用win10自带工具制作动态壁纸的简单方法: 把图片做成动态壁纸,总共分4步:1.准备素材,2.素材导入,3.调整效果, ...
- python modis数据拼接_python调用HEG工具批量处理MODIS数据的方法及注意事项
下面的代码主要用于使用python语言调用NASA官方的MODIS处理工具HEG进行投影坐标转换与重采样批量处理 主要参考 HEG的用户手册:https://newsroom.gsfc.nasa.go ...
- python批处理工具_python调用HEG工具批量处理MODIS数据的方法及注意事项
下面的代码主要用于使用python语言调用NASA官方的MODIS处理工具HEG进行投影坐标转换与重采样批量处理 主要参考 HEG的用户手册:https://newsroom.gsfc.nasa.go ...
- php OpenSSL工具命令导出.cer证书密钥
本文主要讲述Windows系统下使用 OpenSSL工具导出.cer证书密钥 1.安装OpenSSL 官方地址:https://www.openssl.org/source/ 2.安装完成,打开 cm ...
- 使用openssl制作https的证书
1.前言 现在的web应用对安全越来越重视了,很多应用必须采用https来传输数据.但是https必须要有证书,在开发和测试环境一般我们在没条件采用ca签发的可信证书的情况下,我们可以使用openss ...
- Ubuntu18.04 使用 openssl制作自签名证书
执行"openssl verison",判断系统是否已安装openssl,若没有安装,请使用apt安装openssl. 一.图解自签名过程 二.关于 CRT PEM KEY CST ...
- 基于openssl工具完成自建CA以及为server,client颁发证书
文章目录 一.openssl简介 1.1 主要构成部分 1.2 openssl用途 1.3 证书.密钥.CSR请求文件.CRL列表 查看命令 二.RSA密钥操作 2.1密钥生成 2.2 转换命令 2. ...
- primekey证书服务器,使用 OpenSSL 制作 ECDH 密钥交换证书
前言 对于 ECDH,Wikipedia 如下描述: Elliptic curve Diffie–Hellman (ECDH) is an anonymous key agreement protoc ...
最新文章
- 在SQL Server 2005中实现表的行列转换()
- 1-3 交换变量(算法竞赛入门经典)
- JavaScript 中的 window onload 应该什么时候写
- 动态规划 —— 背包问题 P03 —— 多重背包
- PAT1060. 爱丁顿数
- 几何画板画椭圆_几何画板降龙十九式视频教程每天只要十分钟
- Python3+Selenium3+Unittest+ddt+Requests 接口自动化测试框架
- 怎么使用starwind部署iscsi_服务器配置我该怎么选
- Redis设计与实现学习总结
- KL散度、JS散度、Wasserstein距离
- 学生管理系统IPO图_基于BIM技术的医院建筑运维管理系统构建
- environment-modules安装配置
- 在DialogFragment的onStop(完全不可见)时调用dismiss退出界面报错解决办法
- Probability and Hypothesis Testing
- 提问:usb摄像头无输出画面 /window下能识别摄像头,无输出图像拍摄时提示0XA00F4292(PhotoCaptureStartTimeout) /linux下不能识别
- 地图和地理空间革命:地理学大规模开放在线课堂(MOOC)
- [转]JavaScript和html5 canvas生成圆形印章
- 在图像间进行特征匹配
- 微信小程序的tabBar属性
- 一分钟教你配置DHCP服务,超级简单一看就会!!!!!