本文主要介绍如何使用给nginx服务添加客户端证书认证从而实现双向加密。

对于一般的https网站来说,实际上https所使用的证书是属于单向验证,即客户端单向验证服务器的安全性,而服务器端是没有对客户端的身份进行验证的。关于https的原理,可以查看这篇文章:《SSL/TLS、对称加密和非对称加密和TLSv1.3》

如果自己部署了一些安全性较高的网站不希望被其他人随意访问,就可以尝试部署https的双向认证,对客户端也添加证书认证。本文将会使用openssl自签证书来完成最简单的一个https双向认证。

1、openssl自签证书

在开始之前我们新建一个目录专门用来存放这次生成证书相关的全部文件。openssl生成自签证书的命令非常简单,总结如下:

openssl genrsa -out root.key 1024openssl req -new -out root.csr -key root.keyopenssl x509 -req -in root.csr -out root.crt -signkey root.key -CAcreateserial -days 3650

接下来我们开始逐个命令进行讲解,首先我们需要生成一个root.key文件

root.key文件生成之后,我们就可以根据key文件来生成一个记录证书信息的csr文件用于申请证书。csr文件需要记录相关的证书申请人的地址和邮件等信息,最后还可以设置一个密码,当需要使用这个csr文件来申请证书的适合就需要输入这个密码,否则无法使用,如果不想设置的话直接回车即可跳过

生成了keycsr文件之后,我们就可以自己生成一个crt的证书文件,由于这里是测试,我们可以直接把时间设定为10年

到这一步,我们已经生成了一个完整的自签CA证书,其中包含了私钥key文件,证书信息csr文件和公钥crt文件。

2、生成p12证书

为了方便使用,我们需要把证书打包成p12格式的证书文件,然后在客户端的电脑上导入。同样的在生成p12文件的时候我们最好添加一个密码保护,这样就算证书泄露了也不会导致安全问题。

openssl pkcs12 -export -clcerts -in root.crt -inkey root.key -out root.p12

3、配置nginx

最后我们只需要在nginx中需要使用双向认证的部分添加以下配置然后重启即可生效

# 客户端公钥证书
ssl_client_certificate /path/to/root.crt;
# 开启客户端证书验证
ssl_verify_client on;

最后我们在windows或者mac上面导入p12文件之后,打开对应的网站就会有相应的提示了:

如果不进行证书验证,则服务器会返回400错误。

我们还可以使用curl来进行测试,如果不带上证书,会直接报400错误。

# curl https://ip.tinychen.com
<html>
<head><title>400 No required SSL certificate was sent</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<center>No required SSL certificate was sent</center>
<hr><center>nginx</center>
</body>
</html>

带上证书之后则访问正常

[root@tiny-cloud /home/certs]# curl --cert ./root.crt --key ./root.key https://ip.tinychen.com
hello world

如果想要查看curl的详细过程,我们可以加上-v参数来查看。

nginx篇08-添加客户端证书认证相关推荐

  1. SpringBoot的SSL个人CA签发二级证书(动态添加客户端证书)

    SpringBoot的SSL个人CA签发二级证书(动态添加客户端证书) 2018年07月10日 17:09:09 得谷养人 阅读数:388 当我们的服务端部署完成运行起来之后,trustStore信任 ...

  2. java https 验证客户端证书_Java HTTPS客户端证书认证

    小编典典 终于设法解决了所有问题,所以我会回答我自己的问题.这些是我用来解决特定问题的设置/文件: 该客户端的密钥库是一个PKCS#12格式文件包含 客户端的公共证书(在这种情况下,由自签名CA签名) ...

  3. nginx添加ssl证书认证

    让nginx支持ssl证书认证首先安装上openssl,然后执行以下命令: openssl genrsa -out sim.key 1024 openssl req -new -key sim.key ...

  4. openGauss数据库客户端接入认证详解

    目录 前言 认证方式 配置文件解析 示例 参数解释 如何配置 常见错误 前言 日常生活工作中,我们经常遇到需要接入认证的场景,如登录网站.服务器或连接wifi.vpn等等.当一个客户端应用连接一个数据 ...

  5. 域名申请·多域名SSL证书申请·SSL证书认证流程·CAA解析记录添加

    环境:VPS:CentOS8 1.申请域名 通过阿里云申请一个域名就好,博主申请了个人域名.top,第一年6元 2.添加一条IPV4的DNS解析记录 阿里云-控制台-域名解析-解析设置-添加新纪录 这 ...

  6. nginx配置SSL实现服务器/客户端双向认证

    http://blog.csdn.net/kunoy/article/details/8239653 本人不才,配置了两天,终于搞出来了,结合网上诸多博文,特此总结一下! 配置环境: Ubuntu 1 ...

  7. Nginx 配置https证书认证

    一.什么是SSL证书 SL证书全程:SSL安全通道(Secure socket layer(SSL).该安全协议主要用来提供对用户和服务器的认证:对传送的数据进行加密和隐藏:确保数据在传送中不被改变, ...

  8. Spring Boot + WebSocketClient + wss协议证书认证 + 客户端心跳重连机制

    近期公司项目中要对接第三方的WebSocket服务获取数据,本来以为是很简单的工作,但问题是服务方提供的是"wss"协议,需要证书认证,为此查阅了很多博客,都没有解决, 最后还是自 ...

  9. F5基于证书认证的客户端登录

    1.生成密钥RSA类型,密码:123456 保存为Openssl格式 2.上传客户机SecureCRT生成的公钥 Identity.pub到用户home目录下.ssh文件夹中 cd .ssh mv I ...

最新文章

  1. OCR磁盘的导出和导入、备份和恢复以及移动(ocrconfig命令的应用)
  2. 百度地图批量转换 GPS坐标转百度地图坐标 问题
  3. 指针结构体函数-事实上能够这样具体理解
  4. python编的俄罗斯方块游戏_python编写俄罗斯方块
  5. 【人工智能】命题逻辑测验题题解
  6. vs code 开发企业级python_入股不亏!VS Code中最好用的Python扩展插件
  7. silverlight:分享一个不错的自定义布局CollectionFlow(可用于制作相册的哦!)
  8. 精益求精,抑或得过且过
  9. 移动WebApp开发 JS框架对比
  10. vbs实现微信自动发送消息功能
  11. 华为数通部门软开9.16凉经
  12. excel锁定单元格不能修改_锁定单元格不被任意修改和删除
  13. 陈大年:免费很贵创新很累 我如何做WiFi万能钥匙
  14. Android FrameWork学习(一)Android 7.0系统源码下载\编译
  15. java gui 日历_java 日历程序(gui界面)
  16. 北醒激光雷达TFmini测试
  17. 江西理工大学南昌校区排名赛 C: 单身狗的地图游戏
  18. 你们知道工控资料窝吗
  19. 随笔0006 个人作业——软件产品评测
  20. MODBUS协议中的CRC校验

热门文章

  1. Python字符串转换为小写字母
  2. 【管理学】索奥管理培训--第一课:认知与定位
  3. 外贸新手如何把控跟进客户,附11个常见的外贸客户类型及如何回复跟进
  4. 利用函数指针实现回调
  5. Pythonmock基本使用
  6. HDUOJ 4687 Boke and Tsukkomi
  7. 关于手动备份postgres 及mysql数据库
  8. intelli idea 2021 设置java的sout快捷键
  9. 阿里架构师,如何降低系统架构复杂度?
  10. spring养成计划 - spring事物的控制 - (transactionManager)