本文章默认读者了解Openssl,CA,网站证书相关知识,直接实战!配置完成后,浏览器会显示“安全的HTTPS”连接。不会像其他文章那样,是红色警告的证书提示。

准备环境

笔者使用的是Ubuntu16 ,其实什么系统都无所谓,请不要使用旧版Openssl就好,因为里面的漏洞实在太致命。

#先创建一个文件夹
mkdir openssl.Test
cd openssl.Test
mkdir -p ./demoCA/{private,newcerts}
touch demoCA/index.txt
touch demoCA/serial
echo 01 > demoCA/serial
#复制一份配置文件,可能会因系统不一致
cp /etc/ssl/openssl.cnf .

自建CA

1 设置私钥

openssl genrsa -des3 -out ./demoCA/private/cakey.pem 2048

2 申请自签名证书

根据提示一步步填写就好,但要记清楚填了什么,后面会用到

openssl req -new -x509 -days 365 -key ./demoCA/private/cakey.pem -out ./demoCA/cacert.pem

调整openssl.cnf

调整openssl.cnf 用来支持v3扩展,以实现多域名及扩展用途(EKU)

调整原因有二,一是让服务端证书支持多个二级域名,二是符合Chrome的证书检查,否则使用Chrome浏览时会提示不信任此证书

用自己喜欢的编辑器打开openssl.cnf

确保req下存在以下2行(默认第一行是有的,第2行被注释了)

[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req

新增最后一行内容 subjectAltName = @alt_names(前2行默认存在)

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
#设置扩展用途 (EKU) 可选
#extendedKeyUsage = serverAuth,clientAuth
subjectAltName = @alt_names

新增 alt_names,注意括号前后的空格,DNS.x 的数量可以自己加,别忘了把申请证书时填写的域名(Common Name)加上

[ alt_names ]
DNS.1 = abc.example.com
DNS.2 = dfe.example.org
DNS.3 = ex.abcexpale.net

创建服务端证书

1 设置私钥

openssl genrsa -out userkey.pem 2048

2 创建证书申请

提示 Common Name 时 请填写域名,不要设置密码,否则Nginx部分会有麻烦,国家,省份,城市,公司,部门要和创建CA填写的资料一致,当然在配置文件里调整策略能绕过此检查。本文尽量使用默认的配置来完成~~~,所以请保持一致。

openssl req -new -days 365 -key userkey.pem -out userreq.pem

3 签发

openssl ca -in userreq.pem -out usercert.pem -extensions v3_req -config openssl.cnf

4 查看证书

openssl x509 -in usercert.pem -text -noout

创建客户端证书

与服务端类似

openssl genrsa -out clientkey.pem 2048
# Common name 随意写,设不设置密码随意
openssl req -new -days 365 -key clientkey.pem -out clientreq.pem
openssl ca -in clientreq.pem -out clientcert.pem -extensions v3_req -config openssl.cnf

转换下格式,方便windows下导入

openssl pkcs12 -export -inkey clientkey.pem -in clientcert.pem -out client.pfx

浏览器端导入证书即可,忽略这句话的朋友,通常会遇到400的问题,无法自拔!

Nginx

Nginx 需要使用usercert.pem、userkey.pem、demoCA/cacert.pem,请读者自行拷贝出来。

以下配置文件只是参考,实际情况请读者自行配置。

PS:把证书和配置文件放在一个文件夹是不规范的行为,笔者图方便,仅做测试用

配置文件

server {
listen 443 ssl;
server_name test.com; #charset koi8-r;
#access_log /var/log/nginx/host.access.log main; ssl_certificate /etc/nginx/conf.d/usercert.pem;
ssl_certificate_key /etc/nginx/conf.d/userkey.pem;
ssl_client_certificate /etc/nginx/conf.d/cacert.pem;
ssl_verify_client on;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ...... }

Docker 启动

docker run --rm --name nginx01 -p 443:443 -v /home/xxx/www/conf:/etc/nginx/conf.d nginx

Windows打开证书配置管理器

1 当前用户

certmgr.msc

2 本地计算机(win7及以下没有)

certlm.msc

CA证书导入到"本地计算机"->"受信任的根证书颁发机构"中

客户端证书要从浏览器中导入哦!!!

常见问题

1 火狐浏览器 显示 不安全连接

考虑是系统根证书被导入了一个劫持证书,Firefox 49 版本开始添加了一个参数,如果遇到未知的 CA 证书,浏览器可以直接对正在使用的 Windows 系统证书存储机制进行检查对比。

在地址栏键入"about:config" 点击“我了解此风险”

在下方任意位置右键,选择新建布尔值

输入首选项名称为“security.enterprise_roots.enabled”并把值设置为 true

重启浏览器,HTTPS 网站即可正常访问

来源:百度贴吧

2 Chrome 显示 400 状态码

Ctrl + Shift + Del 清除缓存即可

3 IE8.0 如果要求使用 客户端证书 好像会一直出现 400 状态码 ~~~

4 IE11、Edge、Firefox、Chrome 测试通过

5 window导入时可以把*.pem结尾的证书改为*.crt方便识别

6 如果不想使用双向认证,请忽略【创建客户端证书】部分,并调整Nginx配置文件ssl_verify_client off;即可

参考

OpenSSL CA keyUsage extension

openSSL命令、PKI、CA、SSL证书原理

那些证书相关的玩意儿(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等)

openssl用法详解

openssl自签名证书生成与单双向验证

还有一些地址想不起来了,如果引用了您的文章笔者却未声明,请联系笔者。

声明

本文采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

使用 OpenSSL 为 Nginx 创建自签名证书 并开启客户端身份验证的更多相关文章

  1. 使用openssl创建自签名证书及部署到IIS教程

    概要 本文讲解三个部分:1. 创建自签名证书2. 创建自己的证书颁发机构3. 以及如何配置IIS 创建自签名证书 首先,创建一个私钥文件: openssl genrsa -out myselfsign ...

  2. Nginx集群之基于Redis的WebApi身份验证

    目录 1       大概思路... 1 2       Nginx集群之基于Redis的WebApi身份验证... 1 3       Redis数据库... 2 4       Visualbox ...

  3. 使用 OpenSSL为WindowsServer远程桌面(RDP)创建自签名证书 (Self-signed SSL certificate)

    前言 笔者查阅很多资料,才写成此文章,如有错误,请读者们及时提出. 一般大家使用远程桌面(Remote Desktop)连接Windows Server时,总会有一个警告提示,如图1 图1 出现此警告 ...

  4. 自签名证书和私有CA签名的证书的区别 创建自签名证书 创建私有CA 证书类型 证书扩展名【转】

    自签名的证书无法被吊销,CA签名的证书可以被吊销 能不能吊销证书的区别在于,如果你的私钥被黑客获取,如果证书不能被吊销,则黑客可以伪装成你与用户进行通信   如果你的规划需要创建多个证书,那么使用私有 ...

  5. nginx 设置自签名证书以及设置网址http强制转https访问

    自签名证书可以在自己的内网环境或者非对外环境使用,保证通信安装 1.生产证书 直接使用脚本生产: 中途会提示书如1次域名和4次密码,把一下文件保存为sh文件,赋予x权限后 直接执行,根据提示输入. # ...

  6. OpenSSL 创建自签名证书

    1.生成服务器私钥 openssl genrsa -out client.key 4096   2.生成证书签名请求(CSR) openssl req -new -key client.key -ou ...

  7. apache、nginx配置自签名证书

    一.apache: 安装apache.ssl.openssl yum -y install httpd httpd-pear mod_ssl openssl 生成证书文件 openssl genrsa ...

  8. [Apple开发者帐户帮助]三、创建证书(4)创建Safari签名证书

    您的Safari扩展程序必须由Apple颁发的证书签名,您可以在开发者帐户中创建和下载该证书. 在“ 证书”,“标识符和配置文件”中,从左侧的弹出菜单中选择“Safari扩展”. 在“证书”下,选择“ ...

  9. Nginx 使用自签名证书实现 https 反代 Spring Boot 中碰到的页面跳转问题

    问题一:页面自动跳转到 80 端口 问题描述 最近在使用Nginx反代一个Spring Boot项目中碰到了一个问题,使用 Spring Boot 中的 redirect: 进行页面跳转的时候,通过 ...

随机推荐

  1. .netcore Control调用View方法

    控制器代码如下: 视图代码如下: 完整项目代码参考网址:https://github.com/gamecc666/BackTipFrontProject 版权声明:本文为博主原创文章,如需转载,请标明 ...

  2. 从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何创建项目模板

    标题:从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何创建项目模板 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/11155 ...

  3. 【算法•日更•第六期】头脑风暴:洛谷P1528 切蛋糕题解

    ▎(一个没有用处的)前言 为什么这次题解特意写明题号呢?因为我发现了这样的事情: 所以不要混了,想看P1714题解的同志们可以圆润的滚开了. 好了,不说没用的了,切入正题: ▎题目 题目及测评链接:戳 ...

  4. 浅入深出Vue:组件

    组件在 vue开发中是必不可少的一环,用好组件这把屠龙刀,就能解决不少问题. 组件是什么 官方的定义: 组件是可复用的 Vue 实例,并且可带有一个名字. 官方的定义已经非常简明了,组件就是一个实例. ...

  5. 使用Minikube部署本地Kubernetes集群(二十八)

    前言 使用Minikube部署本地k8s集群相对比较简单,非常推荐将其用于本地k8s开发环境,唯一麻烦点的仅仅是网络问题. 在本篇教程中,我们使用了国内的镜像来完成本地k8s集群的搭建.如果搭建过程中 ...

  6. lambda匿名函数和他的小伙伴(处理大量数据的时候用到)

    lambda匿名函数 主要是为了解决一些简单的需求而设计的一句话函数 #计算n的n次方 def func(n): return n**n f = lambda n : n ** n 语法: 函数名 = ...

  7. HTML认识二

    <!doctype html> <html lang="en"><head> <meta charset="UTF-8" ...

  8. 学习springboot整合mybatis并编写测试类

    报名立减200元.暑假直降6888. 邀请链接:http://www.jnshu.com/login/1/20535344 邀请码:20535344 遇到的问题: 1.原因是在启动类上只有一个@Map ...

  9. BFM使用 - 获取平均脸模型的68个特征点坐标

    使用版本:2009 数据说明网址:https://faces.dmi.unibas.ch/bfm/index.php?nav=1-1-0&id=details 数据下载网址:https://f ...

  10. 入职两个月,WPF开发感想

    1 .新工作,新开始 2.WPF初次接触以及学习MVVM开发模式 3.后台数据操作,ORACLE 存储过程(边做边学) 4.总结 4.1工作开发中的小问题 ,遇到的坑:  4.2 解决的问题,学校到的 ...