使用OpenSSL生成证书并配置Https
1、密钥、证书请求、证书概要说明
在证书申请签发过程中,客户端涉及到密钥、证书请求、证书这几个概念。我们以申请证书的流程说明三者的关系。客户端(相对于CA)在申请证书的时候,大体上有三个步骤:
第一步:生成客户端的密钥,即客户端的公私钥对,且要保证私钥只有客户端自己拥有。 第二步:以客户端的密钥和客户端自身的信息(国家、机构、域名、邮箱等)为输入,生成证书请求文件。其中客户端的公钥和客户端信息是明文保存在证书请求文件中的,而客户端私钥的作用是对客户端公钥及客户端信息做签名,自身是不包含在证书请求中的。然后把证书请求文件发送给CA机构。 第三步:CA机构接收到客户端的证书请求文件后,首先校验其签名,然后审核客户端的信息,最后CA机构使用自己的私钥为证书请求文件签名,生成证书文件,下发给客户端。此证书就是客户端的身份证,来表明用户的身份。
2、安装OpenSSL
OpenSSL安装有两种方式,一种编译安装:https://bbs.csdn.net/topics/392193545?page=1
一种直接下载安装包安装(选择对应操作系统版本,文件大的那个): https://www.sslzhengshu.com/article/post-367.html
安装完成后,可以设置环境变量,也可以不设置环境变量,设置环境变量的好处是:在任意位置通过cmd命令行窗口都可以执行openssl命令,而没有设置环境变量则需要进入OpenSSL安装目录进行命令行的操作
3、生成证书
首先进入cmd 进入openssl的安装目录下的 bin 目录(以配置过环境变量的可以省略这一步)
用户证书的生成步骤:
生成私钥(.key)-->生成证书请求(.csr)-->用CA根证书签名得到证书(.crt)
1.建立文件夹
在openssl安装目录下的bin目录内新建 demoCA 目录,再在 demoCA目录内新建 newcerts目录
并且在 demoCA 文件夹内新建一个空的 index.text 文件
再建立一个 serial文件 里面写 01

2.生成根证书
#生成私钥
openssl genrsa -des3 -out root.key 1024
输入命令,回车 会提示输入密码,我设定的密码是123456,之后只要是提示输入密码的,都默认是123456,同时可以看到openssl安装目录下多了一个root.key文件


# 生成根证书 并且 自签名
openssl req -new -x509 -key root.key -out root.crt -config openssl.cfg
接下来会提示输入密码,还输入默认的密码就可以,接下来还会让输入一些基本信息

但是只有红框部分的信息才是最重要的,其他都可以忽略不填,填完之后,发现openssl目录下又多了一个root.crt文件

2、服务端证书生成(生成的证书需要配置到Nginx或者Apache HttpServer)
#生成私钥
openssl genrsa -des3 -out server.key 1024
去除key的密码:
openssl rsa -in server.key -out server.key

为什么要去除server.key的密码呢?这边不是去除而是代表这个证书在被应用程序启动时不需要显示的提示用户输入口令,要不然我们会出现下面这种情况

也就是假如你配置好了https,当你启动nginx时会让你输入密码,所以这一步做的就是启动web server免去输入口令的操作
接下来生成证书,同样也会提示输入密码
#生成服务端证书
openssl req -new -key server.key -out server.csr
提示输入密码,提示完成之后,又让你填写一大堆信息,跟生成root.csr是一样的,需要注意的一点是,这里填写的信息需要跟生成root.csr填写的信息要一致

这个时候,我们看openssl的安装目录,发现多了两个文件,一个server.key 一个server.csr ,

但是为什么这个server.csr为什么跟root.csr的图标不一样呢?(当然不仅仅是因为后缀名不一致的问题),主要是因为因为root.crt是经过签名的(自签名),而server.csr没有经过签名
接下来要做的就是让root.crt和root.key给server.csr进行签名(其实这个过程就是模拟,CA机构进行签名【那个要收费】)
3、使用root.crt和root.key给server.csr进行签名
#使用根证书进行签名 openssl ca -in server.csr -out server.crt -cert root.crt -keyfile root.key -config openssl.cfg


再次查看已经生成了server.crt文件了

3、生成客户端证书
openssl genrsa -des3 -out client.key 1024
openssl req -new -key client.key -out client.csr
openssl ca -in client.csr -out client.crt -cert root.crt -keyfile root.key -config openssl.cfg

4、证书转换
openssl pkcs12 -export -in server.crt -inkey server.key
证书类别
- 根证书 生成服务器证书,客户端证书的基础。自签名。
- 服务器证书 由根证书签发。配置在服务器上。
- 客户端证书 由根证书签发。配置在服务器上,并发送给客户,让客户安装在浏览器里。
要注意,
1. 服务器证书的cn要和servername一致,否则启动httpd时有警告。
2. 浏览器安装客户端证书时,需要用pkcs12转换成pfx格式,否则可以安装但无效。
3. 把根证书安装到浏览器的受信CA中,访问服务器时就不会出警告了。
配置Nginx Https
我这里使用的是window版的nginx,如果需要配置Linux版的nginx,可能需要重新编译添加ssl模块,具体看 : http://blog.csdn.net/tunrijituan/article/details/62249344
打开nginx.cnf 找到 HTTPS server
# HTTPS server
#
server {
listen ssl;
server_name www.kanyun.cpa.cn; ssl_certificate ../cert/server.crt;
ssl_certificate_key ../cert/server.key; ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on; location / {
root F:\cpaweb\dist;
index index.html index.htm;
}
}
标注橘色的部分,表示刚才生成的证书文件和key的位置,要写相对路径,建议将这两个文件放到nginx配置文件的同级目录,写绝对路径可能会报错
使用OpenSSL生成证书并配置Https的更多相关文章
- Linux 部署Nginx反向代理服务 使用openssl自生成证书并配置https
1.安装Nginx编译所依赖的包 正常centos中可以使用yum安装一下依赖包: yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel ...
- CentOS6系统openssl生成证书和自签证书
CentOS6系统openssl生成证书和自签证书的过程,记录一下,本文基于CentOS 6 64bit.$ yum install openssl openssl-devel 1,生成服务器端的私钥 ...
- 使用OpenSSL生成证书
使用OpenSSL生成证书 下载安装openssl,进入/bin/下面,执行命令(把ssl目录下的openssl.cnf 拷贝到bin目录下)1.首先要生成服务器端的私钥(key文件):openssl ...
- 如何利用OpenSSL生成证书
此文已由作者赵斌授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 一.前言 最近为了测试内容分发网络(Content Delivery Network,简称 CDN)添加的新功 ...
- [转帖] ./demoCA/newcerts: No such file or directory openssl 生成证书时问题的解决.
接上面一篇blog 发现openssl 生成server.crt 时有问题. 找了一个网站处理了一下: http://blog.sina.com.cn/s/blog_49f8dc400100tznt. ...
- 使用openssl生成证书,并通过Nginx配置
创建服务器证书密钥文件 server.key openssl genrsa -des3 -out server.key 2048 这个时候会提示输入密码 这个密码要记住 openssl语法 opens ...
- Tomcat启用HTTPS(生成证书、配置Tomcatserver)
Windows下的配置: 第一步:为server生成证书 使用keytool 为 Tomcat 生成证书.假定目标机器的域名是" localhost ". keystore 文件存 ...
- 【HTTPS】自签CA证书 && nginx配置https服务
首先,搭建https服务肯定需要一个https证书.这个证书可以看做是一个应用层面的证书.之所以这么说是因为https证书是基于CA证书生成的.对于正式的网站,CA证书需要到有资质的第三方证书颁发机构 ...
- openssl 生成证书
nginx生成证书,一共四步 1) 生成RSA私钥 (会要求输入至少4位密码)# openssl genrsa -des3 -out private.key 2048 # 2) 根据已生成的RSA私钥 ...
随机推荐
- 分布式系统一致性协议--2PC,3PC
分布式系统中最重要的一块,一致性协议,其中就包括了大名鼎鼎的Paxos算法. 2PC与3PC 在分布式系统中,每一个机器节点虽然能够明确知道自己在进行事务操作过程中的结果是成功或是失败,但是却无法直接 ...
- BZOJ 1068 【SCOI2007】 压缩
题目链接:压缩 区间动归水题.稍微有一点细节. 令\(f_{l,r}\)表示区间\([l,r]\)最短压缩长度,默认\(l\)位置之前有个\(M\).然后就枚举一下放不放\(R\),\(M\)放哪个位 ...
- python 时间元组转时间戳
#!/usr/bin/python # -*- coding: UTF- -*- import time print(time.mktime((, , , , , , , , ))) 输出 15382 ...
- python input输入元素相加
sum= number= while True: : break number=int(input('数字0为结束程序,请输入数字: ')) sum+=number print('目前累加的结果为: ...
- js如何创建JSON对象
js如何创建JSON对象 一.总结 一句话总结:直接创建js数组和js对象即可,然后JSON.stringify就可以获取json字符串,js中的一切都是对象,而且js中的对象都是json对象 js ...
- 重构 MVC; 代码分享工具(重构,改进,打分)
include 模块和 extend 模块的不同: Class Extension: 通过向singleton class中加入Module来定义class method,是对象扩展的一个特例. ...
- Dubbo项目一段时间后提供者消失
Dubbo项目用了一段时间后发现接口不通了,错误500 打开监控中心发现提供者不见了 查看下日志文件发现报如下错 2018-08-06 15:10:18,008 [localhost-startSto ...
- 『TensorFlow』DCGAN生成动漫人物头像_下
『TensorFlow』以GAN为例的神经网络类范式 『cs231n』通过代码理解gan网络&tensorflow共享变量机制_上 『TensorFlow』通过代码理解gan网络_中 一.计算 ...
- 『Re』知识工程作业_主体识别
作业要求 环境路径 类似于这样的,一共50篇文档, 均为中文文档,是法院判决书的合集. 程序 程序如下,我完全使用正则表达式来实现功能, import re import glob import co ...
- python-day16--内置函数
内置函数操作 #!usr/bin/env python # -*- coding:utf-8 -*- # 1.locals()和globals() # def func(): # x=1 # y=2 ...