要生成证书的目录下建立几个文件和文件夹,有
./demoCA/
./demoCA/newcerts/
./demoCA/private/
./demoCA/index.txt (空文件,生成证书时会将数据记录写入)
./demoCA/serial (在serial文件中写入第一个序列号“01”,在生成证书时会以此递增)
概念:首先要有一个根证书,然后用根证书来签发用户证书。
用户进行证书申请:一般先生成一个私钥,然后用私钥生成证书请求(证书请求里应含有公钥信息),再利用证书服务器的根证书来签发证书。
特别说明:
(1)自签名证书(一般用于顶级证书、根证书): 证书的名称和认证机构的名称相同.
(2)根证书:根证书是CA认证中心给自己颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任
数字证书则是由证书认证机构(CA)对证书申请者真实身份验证之后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机构的公章)后形成的一个数字文件。数字证书包含证书中所标识的实体的公钥(就是说你的证书里有你的公钥),由于证书将公钥与特定的个人匹配,并且该证书的真实性由颁发机构保证(就是说可以让大家相信你的证书是真的),因此,数字证书为如何找到用户的公钥并知道它是否有效这一问题提供了解决方案。
openssl中有如下后缀名的文件
.key格式:私有的密钥
.csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
.crt格式:证书文件,certificate的缩写
.crl格式:证书吊销列表,Certificate Revocation List的缩写
.pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式

常用证书协议
x509v3: IETF的证书标准
x.500:目录的标准
SCEP: 简单证书申请协议,用http来进行申请,数据有PKCS#7封装,数据其实格式也是PKCS#10的
PKCS#7: 是封装数据的标准,可以放置证书和一些请求信息
PKCS#10: 用于离线证书申请的证书申请的数据格式,注意数据包是使用PKCS#7封装这个数据
PKCS#12: 用于一个单一文件中交换公共和私有对象,就是公钥,私钥和证书,这些信息进行打包,加密放在存储目录中,CISCO放在NVRAM中,用户可以导出,以防证书服务器挂掉可以进行相应恢复。思科是.p12,微软是.pfx

再说步骤:
生成CA私钥–》生成CA证书请求–》自签名得到根证书(CA给自已颁发的证书)
生成私钥–》生成证书请求–》通过CA签名得到证书
—————————————————————————————-
1.生成X509格式的CA自签名证书
$openssl req -new -x509 -keyout ca.key -out ca.crt -days 3650
$openssl rsa -in ca.key -out ca.key.unsecure -days 3650 //生成一个不需要口令保护的私钥,不推荐,可以于去除密码
* 对已生成csr请求的证书进行自签名的无交互全自动命令:
$openssl -x509 -req -in csr/ca.csr -out newcerts/ca-cert.pem -signkey private/ca-key.pem -passin pass:999999 -days 3650

2.生成服务端的私钥(key文件)及csr 文件
$openssl genrsa -des3 -out server.key 2048
[无交互全自动:$openssl genrsa -des3 -passout pass:111111 -out server.key 2048]
$openssl req -new -key server.key -out server.csr
[无交互全自动:$openssl req -new -passin pass:111111 -key server.key -out server.csr -subj “/C=CN/ST=Guangdong/L=Shenzhen/O=atco company/OU=IT/CN=it.atco.com/emailAddress=atco@163.com”]

3.生成客户端的私钥(key文件)及csr文件
$openssl genrsa -des3 -out client.key 2048
[无交互全自动:$openssl genrsa -des3 -passout pass:111111 -out client.key 2048]
$openssl req -new -key client.key -out client.csr
[无交互全自动:$openssl req -new -passin pass:111111 -key client.key -out client.csr -subj “/C=CN/ST=Guangdong/L=Shenzhen/O=atco company/OU=IT/CN=it.atco.com/emailAddress=atco@163.com”]

4.用生成的CA的证书为刚才生成的server.csr,client.csr文件签名
$openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -days 3650
$openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -days 3650
[无交互全自动:$openssl ca -key 999999 -in client.csr -out client.crt -config conf\openssl.cnf -batch]
(说明:ca私钥及证书位置在conf\openssl.cnf中指定,设置好了可不带-config参数,-key为ca私钥密码,-in为待签名证书申请文件,-out为输出证书文件,-batch表示输出无需人工干预,注意一个证书不可被签名多次,因为index文件中有记录,在此生成的.crt也可换成其它如.pem格式证书)
*进行CA签名获取证书时,需要注意国家、省、单位需要与CA证书相同,否则会报:
The countryName field needed to be the same in the CA certificate (cn) and the request (sh)
*进行CA签名获取证书时,如果信息完全和已有证书信息相同会报错,即不能生成相同的证书,报错信息为:
failed to update database
TXT_DB error number 2
*在进行CA签名获取证书时,可对证书的有效起止时间作控制,默认有效期是一年,可用-days 3650这样的方式改为10年,如想更精确控制,可使用-startdate 和-enddate参数,如-startdate 120501000000Z -enddate 120601000000Z,日期格式为yyMMddHHmmssZ,分别表示年,月,日,时, 分,秒. 其中”Z”是遗留自初始的UTCTIME. 如果没有”Z”,就允许两种附加组”[+/-]hh ‘mm’”,其中”hh”和”mm”分别为与GMT的时差和分差. 如果有”Z”,则时间是以Zulu或GMT时间表示.注:如出现:unable to access the ./demoCA/newcerts directory
这时可找到配置文件,一般是openssl.cnf,修改配置文件项为你生成证书的路径
[ CA_default ]
dir = C:\\OpenSSL\\bin\\demoCA (原值是:./demoCA,注意路径用双斜杠)

5. 生成p12格式证书 (思科是.p12,微软是.pfx)
$openssl pkcs12 -export -inkey client.key -in client.crt -out client.pfx
$openssl pkcs12 -export -inkey server.key -in server.crt -out server.pfx
[无交互全自动:$openssl pkcs12 -export -clcerts -in client.pem -inkey client.key -passin pass:111111 -out client.p12 -passout pass:111111]
说明:-in 为欲转换为p12文件的证书文件,-inkey为与转换为p12文件的证书私钥文件,-passin 为私钥文件密码,-out为p12文件,-passout为p12文件打开密码

6.生成pem格式证书
有时需要用到pem格式的证书,可以用以下方式合并证书文件(crt)和私钥文件(key)来生成
$cat client.crt client.key> client.pem
$cat server.crt server.key > server.pem

7.PFX文件转换为X509证书文件和RSA密钥文件
$openssl pkcs12 -in server.pfx -nodes -out server.pem
$openssl rsa -in server.pem -out server2.key
$openssl x509 -in server.pem -out server2.crt
8. 其他相关命令
$openssl rsa -noout -text -in ca.key //查看私钥

==============NGINX相关配置==============
listen 443 ssl;
ssl_password_file cert/server.pwd; #启动密码
ssl_certificate cert/server.crt;
ssl_certificate_key cert/server.key;
ssl_client_certificate cert/ca.crt;
ssl_verify_client on;
ssl_session_cache shared:SSL:30m;
ssl_session_timeout 30m;
#ssl_protocols SSLv3 TLSv1.2 TLSv1.1 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

转载地址:https://www.chnhacker.com/2017/03/17/%E4%BD%BF%E7%94%A8openssl%E7%94%9F%E6%88%90%E5%8F%8C%E5%90%91%E5%8A%A0%E5%AF%86%E8%AF%81%E4%B9%A6/

转载于:https://www.cnblogs.com/yinliang/p/10334449.html

使用openssl生成双向加密证书(转)相关推荐

  1. 基于 OpenSSL 生成自签名证书,数字签名,泛域名证书,ca证书,PKI等

    基于 OpenSSL 生成自签名证书_qhh0205-CSDN博客_openssl自签名证书 windows 下 nginx 双向认证自签名证书配置 windows 下 nginx 双向认证自签名证书 ...

  2. Openssl生成自签名证书并导入浏览器脚本

    Openssl生成自签名证书并导入浏览器 使用说明 1. 准备工作 2. 脚本 3. 导入浏览器 4. 使用证书 使用说明 环境:Centos 7 运行脚本后可以生成根证书.自签名证书(可以指定域名或 ...

  3. 证书详解及使用openssl生成自签证书与SAN多域名证书

    证书 名词解释: PKI:公钥基础设施 CA:证书颁发机构 CRL:证书吊销列表 OCSP:在线证书状态协议 CSR:证书签名申请 证书生命周期: 证书类型 DV:域名验证,可信度最低,个人和初创公司 ...

  4. openssl生成自签证书

    为什么80%的码农都做不了架构师?>>>    #1.生成私钥 openssl genrsa -des3 -out server.key 2048 #2.去除密码 openssl r ...

  5. 使用OpenSSL生成自签名证书和格式转换

    OpenSSL安装:https://blog.csdn.net/qq_44734154/article/details/125995475 一.生成证书私钥 genrsa 介绍:https://www ...

  6. openssl生成证书链多级证书、证书吊销列表(CRL)

    注:本实验在fedora 24下,openssl1.1.0 初始化 rm -rf /etc/pki/CA/*.old touch /etc/pki/CA/index.txttouch /etc/pki ...

  7. openssl生成自签名证书

    2019独角兽企业重金招聘Python工程师标准>>> 生成CA证书,自己做CA openssl req -new -x509 -keyout ca.key -out ca.crt ...

  8. Openssl 生成自签名证书

    最近在调试Ingress需要使用多份证书,对证书的生成和使用做了简单的整理. 不用翻垃圾桶一条过 #!/bin/sh output_dir="/opt/suops/k8s/ingress-f ...

  9. Windows使用Openssl生成免费pfx证书

    1.生成.key文件,密码Each is hard openssl genrsa -des3 -out server.key 2048 中间会提示输入密码(重复输入两次),要记住这个密码: 这时会在C ...

最新文章

  1. anaconda常用指令,更新查看添加下载源等
  2. 使用 EOLINKER 进行接口测试的最佳路径 (下)
  3. Java 线程同步组件 CountDownLatch 与 CyclicBarrier 原理分析
  4. 安装node-rfc时需要的cmake依赖
  5. Ubuntu中apt与apt-get命令的区别
  6. 【三层】无法直接启动带有“类库输出类型”的项目
  7. [译]GotW #1: Variable Initialization 续
  8. 想进入互联网公司,怎能不知道互联网的技术架构!
  9. java 定时任务 单元测试_介绍java 定时任务最简单的3种实现方法
  10. Pyrene-PEG2000-RB,含有芘丁酸和罗丹明的PEG,Rhodamine-PEG2000-Pyrene
  11. sqlbulkcopy是覆盖式更新吗_关于5G消息,这五点你知道吗?
  12. VirtualBox虚拟机安装Windows XP
  13. 音视频基本概念:码率、比特率
  14. 微信小程序中 三元运算符的嵌套使用
  15. 如果你用过这些电子产品 证明你老了
  16. php实现验证码(数字、字母、汉字)
  17. Edge浏览器越来越难用了?又惹“众怒”!
  18. 一串文字检测被删和被拉黑的好友!
  19. html表格中怎么将背景颜色虚化,如何在Photoshop中制作效果惊艳模糊背景!
  20. PostgreSQL测试套-pg_regress使用

热门文章

  1. php7嵌入,ngx_php7
  2. 语言的顺序表的合拼_2020语文中考专题五:语言运用和综合性学习。掌握基础题五种题型...
  3. muduo网络库学习(一)对io复用的封装Poller,面向对象与基于对象
  4. 世界是一台超级计算机,这个世界其实是一个超级计算机
  5. div弹窗如何设置不超出页面_js实现弹窗功能(以支付方式为例)
  6. Mac更新VSCode写权限被拒绝 Cannot update while running on a read-only volume
  7. Android安卓程序开发的权限设置
  8. IIS -2147467259 (0x80004005)
  9. ajax跨域时使得后台的sessionid不断地的变化,以及layui表格支持跨域的方法,java
  10. 九大排序算法-C语言实现及详解