如何使用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证书的方法及其注意事项总结相关推荐

  1. 使用certbot工具制作免费https证书

    使用certbot工具制作免费https证书 1 概述 为站点添加https是优化提升的一部分工作,本文介绍使用certboot工具制作免费的https证书. https面向的对象:域名 2 资源说明 ...

  2. win10用html文件做壁纸,利用win10自带工具制作动态壁纸的简单方法

    微软在最强大操作系统利用win10自带工具制作动态壁纸的简单方法的详细介绍. 利用win10自带工具制作动态壁纸的简单方法: 把图片做成动态壁纸,总共分4步:1.准备素材,2.素材导入,3.调整效果, ...

  3. python modis数据拼接_python调用HEG工具批量处理MODIS数据的方法及注意事项

    下面的代码主要用于使用python语言调用NASA官方的MODIS处理工具HEG进行投影坐标转换与重采样批量处理 主要参考 HEG的用户手册:https://newsroom.gsfc.nasa.go ...

  4. python批处理工具_python调用HEG工具批量处理MODIS数据的方法及注意事项

    下面的代码主要用于使用python语言调用NASA官方的MODIS处理工具HEG进行投影坐标转换与重采样批量处理 主要参考 HEG的用户手册:https://newsroom.gsfc.nasa.go ...

  5. php OpenSSL工具命令导出.cer证书密钥

    本文主要讲述Windows系统下使用 OpenSSL工具导出.cer证书密钥 1.安装OpenSSL 官方地址:https://www.openssl.org/source/ 2.安装完成,打开 cm ...

  6. 使用openssl制作https的证书

    1.前言 现在的web应用对安全越来越重视了,很多应用必须采用https来传输数据.但是https必须要有证书,在开发和测试环境一般我们在没条件采用ca签发的可信证书的情况下,我们可以使用openss ...

  7. Ubuntu18.04 使用 openssl制作自签名证书

    执行"openssl verison",判断系统是否已安装openssl,若没有安装,请使用apt安装openssl. 一.图解自签名过程 二.关于 CRT PEM KEY CST ...

  8. 基于openssl工具完成自建CA以及为server,client颁发证书

    文章目录 一.openssl简介 1.1 主要构成部分 1.2 openssl用途 1.3 证书.密钥.CSR请求文件.CRL列表 查看命令 二.RSA密钥操作 2.1密钥生成 2.2 转换命令 2. ...

  9. primekey证书服务器,使用 OpenSSL 制作 ECDH 密钥交换证书

    前言 对于 ECDH,Wikipedia 如下描述: Elliptic curve Diffie–Hellman (ECDH) is an anonymous key agreement protoc ...

最新文章

  1. 在SQL Server 2005中实现表的行列转换()
  2. 1-3 交换变量(算法竞赛入门经典)
  3. JavaScript 中的 window onload 应该什么时候写
  4. 动态规划 —— 背包问题 P03 —— 多重背包
  5. PAT1060. 爱丁顿数
  6. 几何画板画椭圆_几何画板降龙十九式视频教程每天只要十分钟
  7. Python3+Selenium3+Unittest+ddt+Requests 接口自动化测试框架
  8. 怎么使用starwind部署iscsi_服务器配置我该怎么选
  9. Redis设计与实现学习总结
  10. KL散度、JS散度、Wasserstein距离
  11. 学生管理系统IPO图_基于BIM技术的医院建筑运维管理系统构建
  12. environment-modules安装配置
  13. 在DialogFragment的onStop(完全不可见)时调用dismiss退出界面报错解决办法
  14. Probability and Hypothesis Testing
  15. 提问:usb摄像头无输出画面 /window下能识别摄像头,无输出图像拍摄时提示0XA00F4292(PhotoCaptureStartTimeout) /linux下不能识别
  16. 地图和地理空间革命:地理学大规模开放在线课堂(MOOC)
  17. [转]JavaScript和html5 canvas生成圆形印章
  18. 在图像间进行特征匹配
  19. 微信小程序的tabBar属性
  20. 一分钟教你配置DHCP服务,超级简单一看就会!!!!!

热门文章

  1. ThinkPHP5.1开启调试和错误提示
  2. 前端需要了解的nginx(2)
  3. Jmeter之线程组(默认)
  4. javascript浮点数学习总结之0.1+0.2
  5. ELK采集之nginx 日志高德地图出城市IP分布图
  6. 一道NP中的EIGRP拓扑表的题
  7. Office与Visio同事安装兼容问题
  8. ZooKeeper 特点有哪些?
  9. 360互联网技术训练营第七期 -“遇见”PIKA 续集
  10. ShardingSphere(四) 垂直分库配置搭建,实现写入读取