https 双向认证基本配置学习

一 证书密钥格式

1.1         DER 格式

公钥,证书文件信息格式,通常后缀名是der,cer,crt,内容是二进制数据。

1.2         PEM 格式

私钥,证书,公钥信息格式,通常后缀名是pem,cer,crt,内容是二进制数据base64编码

以上截图是利用openssl 工具生成的传统pem格式的私钥文件内容。(注意开头结尾有RSA字母,区别pkcs8格式私钥),上图中

openssl 命令可以将PEM格式转换为DER格式

例如 pem 密钥转换为 der 格式密钥

openssl rsa  -in key.pem –outform der –outkey.der

pem格式证书到der格式证书转换

openssl x509 -in ca-cert.pem -outca-cert.der -outform der

pem 和 der 格式的区别是 pem 是 der 格式内容的base64编码加上首尾两行(BEGIN……和END……)

1.3         PKCS 格式

PKCS标准目前已经公布了15种

常用的几种如下:

1.3.1  PKCS#8 私钥文件的信息格式

利用openssl 生成传统格式(PEM)私钥

openss genrsa –out privateKey.pem 2048

转换成pkcs8 格式 (图1.2 的传统格式私钥转换成pkcs8格式)

openssl pkcs8 –topk8 –in privateKey.pem –out privateKeyPkcs8.pem –nocrypt

注意 区别传统的PEM和PKCS8 格式的私钥方法是:

1 传统的PEM格式的头部是BEGIN RSA PRIVATE KEY

2  PKCS#8 格式私钥文件头部是BEGIN PRIVATE KEY

注意 PHP 语言对于两种格式私钥可以都可以直接使用。

注意 对privateKeyPkcs8.pem 再进行一次pkcs8格式转换,其内容不变(diff–u 比较)。

注意 只有私钥才存在这两种格式(pkcs8 和传统格式)

PKCS#8 是RSA公司制定的标准,相对传统PEM私钥格式更加通用些。

另外PKCS#8格式的私钥可以再加密一层(使用对称加密算法),更加安全些。

1.3.2  PKCS#10 证书请求文件信息格式

该文件包括签名算法,公钥信息,申请者信息,使用openssl req 命令可以生成证书请求文件,通常后缀名为csr

例如:openssl req –new –key su-key.pem –outsu-req.csr –days 3650

使用一个私钥su-key.pem 生成一个pkcs#10格式的证书请求文件

1.3.3  PKCS#12 用户个人证书信息格式

该文件包括私钥 公钥和证书, 通常后缀是pfx,p12,导入浏览器个人证书格式(使用opensslpkcs12 可以导出客户端个人证书)

例如:openssl pkcs12 –export –clcerts –in qiyi-cert.pem–inkey qiyi-key.pem –out qiyi.p12

-clcerts 表示只导出客户端证书

qiyi-cert.pem 客户端签名好的PEM格式证书(包含公钥和其他域名等信息)

qiyi-key.pem 客户端PEM格式私钥文件

qiyi.p12 是导出的包含证书,私钥等信息的个人证书 (后缀名也可以为pfx)

其他PKCS格式标准本人未深入了解,这里介绍的三种是配置https双向认证(pkcs10,pkcs#12) 以及非对称加密解密(pkcs8) 时使用到的。

1.4         小结

本次app 基金超市中,服务器端语言是PHP,服务器是nginx。服务器端和Android以及Ios 使用的都是PKCS#8格式的私钥,公钥是PEM格式,其中服务器端使用的私钥跟换为其他格式例如传统格式PEM,也能够解密,android则不能使用传统格式私钥,必须为PKCS#8,ios也必须是用PKCS#8格式。

二 nginx 的 HTTPS 双向认证配置

2.1  https 双向认证原理

双向认证主要工作是用来分发对称加密密钥信息。

具体分发过程如下:

1 浏览器发送连接请求到https服务器

2 服务器将自己的证书信息发送给客户端

3 客户端验证服务器证书的合法性

验证服务器证书是否由受信任的根证书颁发机构(CA)所颁发(主要是验证签名,CA证书公钥解密签名结果与利用签名算法和服务器证书信息生成的签名是否一致)

验证证书的周期是否过期

验证证书的签发机构是否在吊销机构列表中(此过程未详细研究)

验证证书中域名信息是否和访问的域名一致

如果上面四个条件有一个不满足,则提示用户该服务器不可信,由用户选择是否继续访问

4 客户端发送个人证书和一个产生对称加密密钥的随机数(使用从服务器证书中的公钥加密)到服务器,服务器验证客户合法性(是否由某一个配置的信任机构签发 ,是否过期),如果合法,则从证书中获取客户端公钥

5 客户端通知服务器 将使用步骤4中发送的随机数形成对称密钥加密本次连接接下来的 数据以及客户端到服务器认证结束

6 服务器通知客户端 将使用步骤4 中接受的随机数形成对称密钥加密本次连接接下来的通讯数据以及服务器到客户端的认证结束

2.2 基于nginx 的双向认证配置示例(自己担任认证机构)

nginx 开启https 服务需要安装openssl库,这方面内容这里就不再说明。

以下示例 可以自行尝试(在nginx 已经多次尝试没有问题,在apache也尝试一次OK)

2.2.1 生成自签名认证机构CA

l  生成CA私钥(PEM格式)

openssl  genrsa  -out ca-key.pem 2048

l  生成证书请求文件(pkcs#10格式)

openssl req –new –key ca-key.pem –out ca-req.csr –days 3650

(-key 指定私钥文件–new 指定生成一个新证书–days 指定有效期)

l  签名CA证书请求

openssl x509 –req –in ca-req.csr –out ca-cert.pem –signkey ca-key.pem –days3650

 

2.2.2 生成服务器端证书

 证书通常是包括公钥和一些其他信息的文件。

l  生成服务器端私钥文件

openssl genrsa –out serverKey.pem 2048

l  生成服务器端证书请求文件

openssl req –new –key serverKey.pem –out server.csr –days 3650 (会提示输入输入一些个人信息,其中注意的就是域名输入的时候,一定要输入正确的域名,否则导致客户端验证服务器证书合法性始终提示不合法)

l  生成服务器端证书

openssl x509 –req –in server.csr –out server.pem –days 3650 –CAca-cert.pem –CAkey –ca-key.pem –CAcreateserial

(-CAkey 指定CA机构的私钥 –CA 指定CA机构的证书 –CAcreateserial创建CA序列号)

2.2.3 生成客户端(浏览器)证书

浏览器客户端证书比服务器端证书多个重要信息为私钥。

生成浏览器客户端证书(包括客户端私钥 公钥证书pfx/pkcs#12格式)

l  生成客户端私钥(PEM)

openssl genrsa –out clientKey.pem -2048

l  生成客户端证书请求(PKCS#10)

openssl req –new –key clientKey.pem –out client-req.csr days -3650 (会提示用户输入个人信息)

l  生成客户端证书(PEM)

openssl x509 –req –in client-req.csr –out client-cert.pem –days 3650 –CAca-cert.pem –CAkey ca-key.pem –CAcreateserial

l  转换客户端证书到PKCS#12格式(浏览器需要的格式,包括私钥,公钥证书信息)

openssl pkcs12 –export –in client-cert.pem –in clientKey.pem –out client.pfx

客户端浏览器导入证书示例:

IE->工具->Internet选项->内容->证书->个人

导入pfx格式个人证书client.pfx

IE->工具->Internet选项->内容->证书->受信任的根证书

导入ca-cert.pem

nginx 服务器端配置(http server模块)

ssl_certificate  server.pem  //指定服务器证书 server.pem

ssl_certificate_key serverKey.pem //服务器私钥serverKey.pem

ssl_client_certificate ca-cert.pem //CA机构证书 验证客户端证书的合法性

ssl_verify_client on //开启验证客户方证书功能

实际验证的过程,客户端发送请求到https服务器指定端口,服务器将证书server.pem 发送到客户端浏览器,浏览器利用导入到受信任的根证书中

实验分组:

1: 配置nginx服务器双向认证,浏览器未导入受信任的根证书和个人证书,首先提示服务器不可信任,是否继续访问,用户点击继续,后提示未发送要求的证书

2            服务器端删除 ssl_verify_client on, 1条件下则又可以继续访问

3            恢复ssl_verify_client on,按照图2.1 导入客户端浏览器两个证书(CA和个人)则可以正常访问。

三 附录

3.1 openssl 常用命令汇总

opensslgenrsa生成私钥

openssl  genrsa –outprivateKey.pem 2048

openssl  rsa生成公钥

openssl rsa –in privateKey.pem –out –pubout –out publicKey.pem

openssl  rsa –in privateKey.pem –out –pubout –outpublicKey.der –outform der (生成der格式公钥,注意只有公钥和证书有der格式)

非对称加密算法与对称加密算法主要区别是非对称加密解密的密钥不同(RSA),对称加密解密其密钥是相同的,主要有DES,三重DES

转换私钥到PKCS#8格式

openssl pkcs8 –topk8 –in privateKey.pem –out privateKeyPkcs8.pem –nocrypt

(转换私钥为pkcs8格式,-nocrypt 表示不加密,否则会将私钥信息进行一次对称算法的加密)

openssl req 命令(http://blog.csdn.net/fym0121/article/details/7992340)

-new 用于生成新的证书请求 如果没有指定-key 会先生成私钥

-key 指定私钥文件

-out 输出文件(默认PEM格式)

openssl  x509 命令(http://blog.csdn.net/allwtg/article/details/4982507)

签名证书请求文件,形成证书文件以及转换证书格式,显示证书内容

-req 指定输入文件是证书请求文件

-in 指定输入文件

-out 输出证书文件

-CAkey  CA机构私钥文件

-CA CA证书文件

-days 有效期

-signkey 指定生成自签名CA证书时 使用的私钥文件(注意去CAkey区别)

3.2 相关网址

常见证书格式转换

http://blog.csdn.net/rztyfx/article/details/6919220

openssl 命令学习网址

http://blog.csdn.net/as3luyuan123/article/details/16105435

PKCS8 格式和PEM格式区别

http://diabloneo.diandian.com/post/2013-04-17/40050808307

nginx https 双向认证配置

http://isouth.org/archives/347.html

http://www.cnblogs.com/dyllove98/p/3157370.html

openssl rsa 命令

http://blog.csdn.net/as3luyuan123/article/details/16811945

openssl 命令分类

http://wenku.baidu.com/link?url=KQR2uQzcmgZWRe-rqaSD0oCk7-rQfX-ndWI34BfR_2bcW-3NLavGBxhsxrX-ogMxE5lXVCtUndh9gn-0UyBUT37toGPv8L6qT1hfIMd-DYi

ssl 双向认证原理

http://www.cnblogs.com/jifeng/archive/2010/11/30/1891779.html

https 双向认证基本配置学习相关推荐

  1. 巧用 Nginx 快速实现 HTTPS 双向认证

    1.原理 双向认证,顾名思义,客户端和服务器端都需要验证对方的身份,在建立 HTTPS 连接的过程中,握手的流程比单向认证多了几步.单向认证的过程,客户端从服务器端下载服务器端公钥证书进行验证,然后建 ...

  2. HTTPS双向认证(Mutual TLS authentication)

    HTTPS双向认证(Mutual TLS authentication) 双向认证,顾名思义,客户端和服务器端都需要验证对方的身份,在建立Https连接的过程中,握手的流程比单向认证多了几步.单向认证 ...

  3. tomcat实现https双向认证配置

    Tomcat实现https双向认证配置 1.生成证书库 2.jks转p12 3.证书库导出cer文件 4.证书库生成证书请求 5.对证书请求进行签名 6.例子 6.1创建证书库 6.2导出根证书 6. ...

  4. nginx 配置 https双向认证

    参考文章: https://blog.csdn.net/xiangguiwang/article/details/76400805 https://blog.csdn.net/qq_37049781/ ...

  5. Https双向认证Android客户端配置

    Https双向认证啊  做了两遍,第一遍懵懂状态处于 好不容易做好了,换服务器,一下子懵了,使出浑身解数又找了一遍,这下终于好了  快哭啦,必须滴要记录一下,以免以后遇到继续懵,这里用retrofit ...

  6. HTTPS双向认证配置

    最近看了下HTTPS相关的,概念性的东西各位就去查查资料吧.主要找到两篇比较靠谱的文章,收藏下. xiooa面复制自https://my.oschina.net/jjface/blog/339144 ...

  7. 证书类型、自签CA证书、https双向认证(一篇就懂系列)

    #博学谷IT学习技术支持# 文章目录 1.Linux准备环境 2.证书扩展名 3.自签CA证书 3.1 生成根证书 3.2 生成服务端证书 3.3 生成客户端证书 4.开启https,并校验客户端(双 ...

  8. kubernetes https双向认证-----ca认证

    为什么写这个呢? 在没有了解k8s认证的时候干过一件蠢事,公司项目是通过bearer token进行权限认证的,当时一直在纠结这个token是哪儿来的,然后各种查询secret对比是否一样,最后找到了 ...

  9. Spring实现HTTPS双向认证

    目录 前言 一.单向认证和双向认证 二.创建keyStore和trustStore 三.服务端配置 四.客户端配置 总结 参考链接 前言 本篇博客讲的主要是双向认证,通过一些简单案例来展示双向认证的配 ...

  10. Apache httpd设置HTTPS双向认证

    一.环境 httpd: 2.4.4  openssl:1.0.1  os:ubuntu 12.04 LTS 二.场景 我准备在httpd上配置一个HTTPS双向认证,既向客户端表明自己的身份,也只允许 ...

最新文章

  1. 北京 10 年,难说再见!
  2. python中标识符下划线用作开头_python python中那些双下划线开头的那些函数都是干啥用用的...
  3. [置顶] 谈谈找工作过程中的那些环节、注意点和经验
  4. 刚安装了Fedora32,尝尝鲜~,哈哈~~~
  5. 如果你想写自己的Benchmark框架
  6. IdentityServer4【QuickStart】之使用asp.net core Identity
  7. java bytebuffer 读写_java nio bytebuffer文件读写问题
  8. 华为面试题算什么,这个背会了外企随便进
  9. 一个简单51c语言程序,求一个 89C51 简易计算器的c语言程序 只要加减乘除就行!...
  10. 解决ASP.NET在IE10中Session丢失问题
  11. JDBC连接数据库经验技巧集萃
  12. java Comparable 和 Cloneable接口
  13. html二维数组查找车票,火车票售票系统
  14. 你需要了解的App经济学基础 转
  15. NB-IoT 基于蜂窝的窄带物联网
  16. 个人计算机系统的不稳定原因,cpu使用率忽高忽低怎么办 电脑cpu使用率不稳定原因分析【详解】...
  17. 第4版 网页设计与制作 HTML5+CSS3+JavaScript(赵丰年 编著)学习笔记
  18. windows/dos 命令
  19. ezuikit-js萤石云
  20. matlab统计水文参数,科学网—[转载]利用MATLAB计算水文极值 - 刘朋的博文

热门文章

  1. echarts2的一个地图demo
  2. matlab常用函数解释,MATLAB常用函数总结
  3. CIO40:IT人22-30岁职业规划
  4. 笔记本电脑怎么拆开后盖_联想笔记本电脑怎么拆开后盖_联想笔记本怎么拆
  5. 【滤波器】7. 带通滤波器
  6. 神州十二号载人飞船和空间站对接成功 我们的目标是星辰大海!
  7. 遗传算法原理与matlab,有关路径优化遗传算法原理(结合matlab代码)
  8. aspen怎么做灵敏度分析_灵敏度分析aspen
  9. 110kv/35kv变电所无功补偿技术的研究+matlab仿真模型
  10. Linux(ubuntu18.04)安装eclipse教程