对于 NGINX 的 HTTPS 配置,通常情况下我们只需要实现服务端认证就行,因为浏览器内置了一些受信任的证书颁发机构(CA),服务器端只需要拿到这些机构颁发的证书并配置好,浏览器会自己校验证书的可用性并通过 SSL 进行通讯加密。

但特殊情况下我们也需要对客户端进行验证,只有受信任的客户端才能使用服务接口,此时我们就需要启用双向认证来达到这个目的,只有 当客户端请求带了可用的证书才能调通服务端接口 。

CA 与自签名

CA 是权威机构才能做的,并且如果该机构达不到安全标准就会被浏览器厂商“封杀”,前不久的沃通、StartSSL 就被 Mozilla、Chrome 封杀了。不过这并不影响我们进行双向认证配置,因为我们是自建 CA 的..

为了方便,我们就在 NGINX 的目录下进行证书相关制作:

创建相关目录

#mkdir ssl

#cd ssl

制作 CA 私钥

#openssl genrsa -out ca.key 2048

制作 CA 根证书(公钥)

#openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

服务器端证书

制作服务端私钥

#openssl genrsa -out server.pem 1024

#openssl rsa -in server.pem -out server.key

生成签发请求

#openssl req -new -key server.pem -out server.csr

用 CA 签发

#openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt

客户端证书

和服务端证书制作一样。

至此需要的证书都弄好了,现在开始配置Nginx。

部分主要配置:

server{

  ssl on;

  ssl_certificate ssl/server.crt; #server公钥

  ssl_certificate_key ssl/server.key; #server私钥

  ssl_client_certificate ssl/ca.crt; #根级证书公钥,用于验证各个二级client

  ssl_verify_client on;

}

配置好后就就重新reload nginx。

请求验证

1、浏览器验证

由于是双向认证,直接通过浏览器访问https地址是被告知400 Bad Request(No required SSL certificate was sent)的,需要在本机安装client证书。
windows上安装的证书需要pfx格式,也叫p12格式,生成方式如下:
openssl pkcs12 -export -inkey ssl/client.key -in ssl/client.crt -out ssl/client.pfx #执行后会提示输入密码(用于安装使用的)
然后考到windows中双击即可进行安装,安装时会提示输入生成证书时设置的密码。
安装成功后,重启浏览器输入网址访问,浏览器可能会提示你选择证书,选择刚才安装的那个证书即可。
此时有些浏览器会提示用户该证书不受信任,地址不安全之类,这是因为我们的server证书是我们自己颁发的,而非真正的权威CA机构颁布,忽略它既可。
2、CURL验证
执行curl命令,带上证书,但是有些问题,貌似是curl本身的问题,这里就不研究了,应为用浏览器已经验证通过。
相关命令:
curl -k --cert ssl/client.crt --key client.key https://ip:443

最新文章

  1. Fragment之间传值
  2. .NET Memory Profiler 查看内存使用情况
  3. [Network] 计算机网络基础知识总结
  4. 20169212《Linux内核原理与分析》第三周作业
  5. java提高篇-----详解java的四舍五入与保留位
  6. 让python整型计算结果为浮点型
  7. ZOJ 2432 Greatest Common Increasing Subsequence(最长公共上升子序列+路径打印)
  8. Mysql SlowLog 工具 pt-query-diglist
  9. MFC 自定义控件
  10. web从入门开始(1)------简介
  11. Code First约定-Fluent API配置
  12. 图零直播新闻发布会—TOLINK2.0全面上线
  13. final关键字(最终的)
  14. jsp静态与动态包含的区别和联系
  15. IOS开发初体验
  16. LayoutInflater.inflate()方法两个参数和三个参数
  17. 【速读】——Shangxuan Tian——【ICCV2017】WeText_Scene Text Detection under Weak Supervision
  18. log4net 开启内部调试
  19. skipper http router 简单试用
  20. 银行卡号码校验算法(Luhn算法,又叫模10算法)

热门文章

  1. TextView的封装和自定义
  2. postman使用当前时间戳
  3. Hadoop 部署之 Hive (五)
  4. 最新 汇通达java校招面经 (含整理过的面试题大全)
  5. .Net WebApi接口之Swagger UI 隐藏指定接口类或方法
  6. bootstrap基础学习【网格系统】(三)
  7. ZoomEye
  8. 主成分分析(PCA)与线性判别分析(LDA)
  9. [转帖]ubuntu 修改 apt源的方法
  10. HanLP-地名识别调试方法