Nginx SSL 双向认证,key 生成和配置
一、安装Nginx和OpenSSL
yum install nginx openssl -y
二、SSL 服务器 / 客户端双向验证证书的生成
创建一个新的 CA 根证书,在 nginx 安装目录下新建 ca 文件夹,进入 ca,创建几个子文件夹
mkdir ca && cd ca
mkdir newcerts private conf server
# newcerts 子目录将用于存放 CA 签署过的数字证书(证书备份目录);
# private 用于存放 CA 的私钥;
# conf 目录用于存放一些简化参数用的配置文件;
# server 存放服务器证书文件。
conf 目录新建 openssl.conf 文件
[ ca ]
default_ca = foo # The default ca section
[ foo ]
dir = ./ # top dir
database = ./index.txt # index file.
new_certs_dir = ./newcerts # new certs dir
certificate = ./private/ca.crt # The CA cert
serial = ./serial # serial no file
private_key = ./private/ca.key # CA private key
RANDFILE = ./private/.rand # random number file
default_days = 3650 # how long to certify for
default_crl_days= 30 # how long before next CRL
default_md = sha256 # message digest method to use
unique_subject = no # Set to 'no' to allow creation of
# several ctificates with same subject.
policy = policy_any # default policy
[ policy_any ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = match
localityName = optional
commonName = supplied
emailAddress = optional
生成私钥 key 文件
openssl genrsa -out private/ca.key 2048
输出
Generating RSA private key, 2048 bit long modulus
.......+++
.........................+++
e is 65537 (0x10001)
private 目录下有 ca.key 文件生成。
生成私钥 key 文件
openssl genrsa -out private/ca.key 2048
输出
Generating RSA private key, 2048 bit long modulus
.......+++
.........................+++
e is 65537 (0x10001)
private 目录下有 ca.key 文件生成。
生成证书请求 csr 文件
openssl req -new -key private/ca.key -out private/ca.csr
生成凭证 crt 文件
openssl x509 -req -days 365 -in private/ca.csr -signkey private/ca.key -out private/ca.crt
private 目录下有 ca.crt 文件生成。
为我们的 key 设置起始序列号和创建 CA 键库
echo FACE > serial
#可以是任意四个字符
touch index.txt
为 "用户证书" 的移除创建一个证书撤销列表
openssl ca -gencrl -out ./private/ca.crl -crldays 7 -config "./conf/openssl.conf"
# 输出
Using configuration from ./conf/openssl.conf
private 目录下有 ca.crl 文件生成。
三、服务器证书的生成
创建一个 key
openssl genrsa -out server/server.key 2048
为我们的 key 创建一个证书签名请求 csr 文件
openssl req -new -key server/server.key -out server/server.csr
使用我们私有的 CA key 为刚才的 key 签名
openssl ca -in server/server.csr -cert private/ca.crt -keyfile private/ca.key -out server/server.crt -config "./conf/openssl.conf"
# 输出
Using configuration from ./conf/openssl.conf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'CN'
stateOrProvinceName :ASN.1 12:'GuangDong'
localityName :ASN.1 12:'XX'
organizationName :ASN.1 12:'****'
organizationalUnitName:ASN.1 12:'**'
commonName :ASN.1 12:'**'
emailAddress :IA5STRING:'****'
Certificate is to be certified until Mar 19 07:37:02 2017 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
注:签名信息每次必须输入一致
四、客户端证书的生成 * 创建存放 key 的目录 users
mkdir users
* 为用户创建一个 key
openssl genrsa -des3 -out ./users/client.key 2048
输出:
Enter pass phrase for ./users/client.key:123
Verifying - Enter pass phrase for ./users/client.key:123
#要求输入 pass phrase,这个是当前 key 的口令,以防止本密钥泄漏后被人盗用。两次输入同一个密码(比如我这里输入 123),users 目录下有 client.key 文件生成。
为 key 创建一个证书签名请求 csr 文件
openssl req -new -key ./users/client.key -out ./users/client.csr
#users 目录下有 client.csr 文件生成。
使用我们私有的 CA key 为刚才的 key 签名
openssl ca -in ./users/client.csr -cert ./private/ca.crt -keyfile ./private/ca.key -out ./users/client.crt -config "./conf/openssl.conf"
将证书转换为大多数浏览器都能识别的 PKCS12 文件
openssl pkcs12 -export -clcerts -in ./users/client.crt -inkey ./users/client.key -out ./users/client.p12
输出
Enter pass phrase for ./users/client.key:
Enter Export Password:
Verifying - Enter Export Password:
输入密码后,users 目录下有 client.p12 文件生成。
五、Nginx配置
vhosts.xxx.conf 在 server { }段输入如下代码
listen 443;
server_name localhost;
ssi on;
ssi_silent_errors on;
ssi_types text/shtml;
ssl on;
ssl_certificate /usr/local/nginx/ca/server/server.crt;
ssl_certificate_key /usr/local/nginx/ca/server/server.key;
ssl_client_certificate /usr/local/nginx/ca/private/ca.crt;
ssl_session_timeout 5m;
ssl_verify_client on; #开户客户端证书验证
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDH:AES:HIGH:!aNULL:!MD5:!ADH:!DH;
ssl_prefer_server_ciphers on;
重新启动Nginx
nginx -t
nginx -s reload
在浏览器导入client.p12文件即可访问
Nginx SSL 双向认证,key 生成和配置的更多相关文章
- nginx支持ssl双向认证配置
nginx支持ssl双向认证配置 listen 443; server_name test.com; ssl on; ssl_certificate server.crt; //server端公钥 s ...
- tomcat配置SSL双向认证
一.SSL简单介绍 SSL(Secure Sockets Layer 安全套接层)就是一种协议(规范),用于保障客户端和服务器端通信的安全,以免通信时传输的信息被窃取或者修改. 怎样保障数据传输安全? ...
- Nginx、SSL双向认证、PHP、SOAP、Webservice、https
本文是1:1模式,N:1模式请参见新的一篇博客<SSL双向认证(高清版)> ----------------------------------------------------- 我是 ...
- apache用户认证,ssl双向认证配置
安装环境: OS:contos 6.4 httpd:httpd-2.2.15-59.el6.centos.i686.rpm openssl:openssl-1.0.1e-57.el6.i686.rpm ...
- SSL双向认证(高清版)
介绍了SSL双向认证的一些基本问题,以及使用Nginx+PHP基于它搭建https的Webservice. 之前的方式只是实现1:1的模式,昨天同事继续实现了n:1的模式,这里我再整理记录下. 由于n ...
- php实现https(tls/ssl)双向认证
php实现https(tls/ssl)双向认证 通常情况下,在部署https的时候,是基于ssl单向认证的,也就是说只要客户端认证服务器,而服务器不需要认证客户端. 但在一些安全性较高的场景,如银行, ...
- ssl双向认证
ssl双向认证 一.背景知识 1.名词解释 ca.key: 根证书的私钥 , ca.crt: 根证书的签名证书 server.key, server.crt client.key, client.cr ...
- SSL双向认证和SSL单向认证的流程和区别
refs: SSL双向认证和SSL单向认证的区别https://www.jianshu.com/p/fb5fe0165ef2 图解 https 单向认证和双向认证!https://cloud.tenc ...
- SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码)
SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码) 摘自: https://blog.csdn.net/sjin_1314/article/det ...
- 在 kafka 的 broke 和 client 之间加入 SSL 双向认证
在 kafka 的 broke 和 client 之间加入 SSL 双向认证https://blog.csdn.net/hohoo1990/article/details/79110031 kafka ...
随机推荐
- ARC149(A~E)
Tasks - AtCoder Regular Contest 149 又是114514年前做的题,现在来写 屯了好多,清一下库存 A - Repdigit Number (atcoder.jp) 直 ...
- 迁移学习《Efficient and Robust Pseudo-Labeling for Unsupervised Domain Adaptation》
论文信息 论文标题:Efficient and Robust Pseudo-Labeling for Unsupervised Domain Adaptation论文作者:Hochang Rhee.N ...
- Android HAL机制的深入理解及在Linux上移植和运行的一个好玩的HAL小例子
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明 Ubuntu 18.04.x 前言 近一年来, ...
- 【机器学习入门与实践】数据挖掘-二手车价格交易预测(含EDA探索、特征工程、特征优化、模型融合等)
[机器学习入门与实践]数据挖掘-二手车价格交易预测(含EDA探索.特征工程.特征优化.模型融合等) note:项目链接以及码源见文末 1.赛题简介 了解赛题 赛题概况 数据概况 预测指标 分析赛题 数 ...
- java.lang.OutOfMemoryError- unable to create new native thread 问题排查
问题描述 最近连续两天大约凌晨3点,线上服务开始异常,出现OOM报错.且服务所在的物理机只能ping通,但是无法登录.报错信息如下: ERROR 04-12 03:01:43,930 [Default ...
- java生成机器码
java根据系统参数生成每个计算机的唯一标识. 1. 获取CPU序列号 /** * 获取CPU序列号 * @return * @throws IOException */ public static ...
- 一篇文章搞定什么是nodeJs它和NPM关系与应用
现在前端的入门门槛越来越高了,不再是单纯 html+css+js,各种前端框架 层出不穷,各种ui组件库层出不穷. 模块化,打包化,各种工具库层出不穷,前端变成大前端 ,甚至前端可以搞定整个项目,通过 ...
- 2023-05-05:给定一个无向、连通的树 树中有 n 个标记为 0...n-1 的节点以及 n-1 条边 。 给定整数 n 和数组 edges , edges[i] = [ai, bi]表示树中的
2023-05-05:给定一个无向.连通的树 树中有 n 个标记为 0...n-1 的节点以及 n-1 条边 . 给定整数 n 和数组 edges , edges[i] = [ai, bi]表示树中的 ...
- 2023-02-17:sdl是跨平台的多媒体开发库,请问用go语言如何调用?
2023-02-17:sdl是跨平台的多媒体开发库,请问用go语言如何调用? 答案2023-02-17: 用 github.com/moonfdd/sdl2-go 这个库. 这是我自己写的golang ...
- 2021-08-25:给定数组father大小为N,表示一共有N个节点,father[i] = j 表示点i的父亲是点j, father表示的树一定是一棵树而不是森林,queries是二维数组,大小为
2021-08-25:给定数组father大小为N,表示一共有N个节点,father[i] = j 表示点i的父亲是点j, father表示的树一定是一棵树而不是森林,queries是二维数组,大小为 ...