HTTPS 是我们开发中经常用到的通信加密技术,能有效保护我们网络访问中的安全,本文主要讲解单向 和 双向 https 的配置。关于https 的实现原理在这里我就不赘述了,附上阮一峰老师的关于https介绍几篇博客,有兴趣的童鞋可以看一看:图解SSL/TLS协议   数字签名是什么?

本文目录:

1、单向https配置

2、双向https配置

3、常见名词说明(转载)

1.单向https 配置

  • 生成https证书命令:

    sudo keytool -genkey -keyalg RSA -dname "cn=localhost,ou=none,o=none,l=shanghai,st=shanghai,c=cn" -alias server -keypass  -keystore server.keystore -storepass  -validity                                         
  • 生成CSR文件

    本文只是生成自签名的https证书,如果需要申请CA证书,就需要生成CSR文件,并将此文件提交给相应CA机构申请CA证书。

    sudo keytool -certReq -alias server -keystore server.keystore -file ca.csr -storepass 
  • 生成CER文件

    因为我们生成的证书使用keytool生成的,没有经过操作系统可信任的CA机构颁发,所以当用浏览器访问时,会出现不信任证书警告,我们手工将cer文件(服务端公钥)导入浏览器的证书列表,让其信任。

    sudo keytool -export -alias server -keystore server.keystore -file ca.cer -storepass 
  • 在Tomcat中配置Https证书

   在serve.xml 中添加如下配置,即可访问https的站点了。

<Connector SSLEnabled="true" clientAuth="false"
keystoreFile="/Users/beiyan/Documents/test/server.keystore"
keystorePass="123456" maxThreads="150" port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"
secure="true" sslProtocol="TLS" />

   其中keystoreFile 为证书的地址,keystorePass 为证书的密码。

访问界面如下:

  • 导入CER文件,让浏览器信任此证书

    双击 ca.cer 即可导入,再设置为 始终信任 ,再次访问

  • 应用程序访问

    如果使用HttpClient 等工具访问该Https连接时,需要讲ca.cer 导入jre中;
    命令如下:keytool -import -alias tomcatsso -file "ca.cer" -keystore "/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/security/cacerts" -storepass 123456
    其中 /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre 是jre目录 123456 是jre默认的密码

    2.双向https配置

  • 生成Server端证书:

    sudo keytool -genkey -keyalg RSA -dname "cn=localhost,ou=none,o=none,l=shanghai,st=shanghai,c=cn" -alias server -keypass  -keystore server.keystore -storepass  -validity 
  • 生成客户端证书:

    这里的客户端为浏览器,浏览器支持的证书格式为PKCS12,这里生成PKCS12格式的证书:

    sudo keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -dname "cn=localhost,ou=none,o=none,l=shanghai,st=shanghai,c=cn"  -keypass  -storepass  -keystore client.p12 -validity 
  • 让服务端信任客户端的证书

    由于是双向认证,服务端必须验证客户端的身份,所以需要将客户端的公钥导入到服务端的信任列表,但是这里生成的PKCS12文件不能直接导入,所以先导出成CER文件,再将CER文件导入服务端的证书库。
    1、将客户端证书导出为一个单独的CER文件

    sudo keytool -export -alias client -keystore client.p12 -storetype PKCS12 -storepass  -rfc -file client.cer

    2、将CER文件导入服务端的证书库

    sudo keytool -import -v -file client.cer -keystore server.keystore

    3、查看server.keystore 里面的证书列表:

    sudo keytool -list -keystore server.keystore

    上图可以看到,证书库中包含两个证书,一个是服务端的私钥,一个是客户端的可信任公钥

  • 让客户端信任服务端证书

    客户端也需要验证服务端的证书是否可靠,所以也需要将服务端证书的公钥导入客户端的信任列表。通用的做法是将服务器证书导出为一个单独的CER文件,然后双击安装到浏览器的证书列表即可。

    sudo keytool -keystore server.keystore -export -alias server -file server.cer -validity 
  • 所有生成的证书列表如下:

    client.cer:客户端证书的公钥
    client.p12:客户端证书的私钥
    server.cer:服务端证书的公钥
    server.keystore:服务端证书库,既包含服务端私钥,又包含客户端公钥

  • 修改Tomcat 配置:

在serve.xml 中添加如下配置

  • <Connector SSLEnabled="true" clientAuth="true"
    keystoreFile="/Users/beiyan/Documents/test/keytool/server.keystore"
    truststoreFile="/Users/beiyan/Documents/test/keytool/server.keystore"
    truststorePass="123456" keystorePass="123456" maxThreads="150" port="8443"
    protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"
    secure="true" sslProtocol="TLS" />
    clientAuth="true"表示双向认证
  • 客户端安装私钥

    双击client.p12即可安装

    备注(这里是mac下面的设置方式,window 与此类似,双击进入安装界面)

  • 客户端安装服务端的公钥

    双击server.cer文件,设置同上

  • 成功访问:

弹出客户端证书选择界面,选择客户端证书,即可正常访问
       
                                              选择证书界面

3、jks,keystore,trustore,cer,pfx等名词说明zhuan(转自网络)

备注:此处转自网络,网络地点太多不确定源地址

密钥:
公钥+私钥的统称。

密钥对:
公钥(证书)和私钥成对存在。通信双方各持有自己的私钥和对方的公钥。自己的私钥需密切保护,而公钥是公开给对方的。在windows下,单独存在的公钥一般是后缀为.cer的文件

A用自己的私钥对数据加密,发给B,B用A提供的公钥解密。同理B用自己的私钥对数据加密,发送给A后,A用B的公钥解开。

公钥的两个用途:
1。验证对方身份:防止其他人假冒对方发送数据给你。
2。解密。
私钥的两个用途:
1。表明自己身份:除非第三方有你私钥,否则无法假冒你发送数据数据给对方。
2。加密。

jks(Javakey store):
Java用的存储密钥的容器。可以同时容纳n个公钥或私钥,后缀一般是.jks或者.keystore或.truststore等,千奇百怪。不管什么后缀,它就是一个容器,各个公司或机构叫法不同而已。比如把只包含"受信任的公钥"的容器存成.truststore文件等。
用jdk\bin目录下的keytool.exe对其进行查看,导入,导出,删除,修改密码等各种操作。可以对jks容器加密码,输入正确才可以操作此容器中密钥。还有一个密码的概念与上者不同,是jks中存储着的私钥的密码,通常是绝密的。

pfx:
和jks功能相同但文件格式不同,pfx是浏览器用的。
可以用一些工具程序把pfx转化成jks格式供java程序使用(如银行只提供了pfx,但是我们想用httpclient模拟浏览器自动访问时)。据说IE导出的pfx格式不标准,转化jks时往往报错,可以尝试用Netscape Navigator导入再导出,然后再转化。碰到过这样的情况。

常见的几种https系统的访问。经https协议的数据经过加密传输,防止第三方监听,冒充和篡改。
1.不需要用户做任何操作,比如https://www.verisign.com/
这是因为此公钥是合法的(公钥是可信任的机构颁发,和实际域名吻合,而且没有到期)。用IE访问时空白处点右键可以查看公钥信息。
2.https的页面会弹出公钥确认提示
公钥不合法(不是可信任的机构颁发,和实际域名不吻合,已到期),但用户点“是”即表示忽略危险,继续访问。
3.需要往浏览器倒入一个文件才可访问的
一般是银行在线交易等特别需要安全的场合,站方(银行)需要验证访客身份(如要确认必须是已注册的网银商户),需要在浏览器中导入含有访客私钥的pfx文件。

生成jks:
在银行没有提供jks文件的情况下对帐,需要自己生成jks
对于1,2类https网站,如果java程序访问此地址时在jre默认的信任库中找不到对方证书的颁发机构,则会抛出安全方面的异常。所以要将站方公钥存进一个jks,并在环境变量中设定,表明信任此库中的公钥,才可以正常访问。
我是用现成的make_jks的工具类在程序中读取https://xxxx地址,程序自动抓取出银行公钥并存进一个jks文件。
在浏览器中查看站方公钥时,把公钥导出(一般是cer后缀),然后用keytool.exe手工将此cer导入一个jks或许也可以?没试过。
以上1,2类https网站,仅仅是用到了公钥的“验证对方身份”功能。对于第3种https网站,也可以找到现成的程序把pfx直接转成jks。既然动用了pfx,一般是把公钥的两个用途和私钥的两个用途都用起来






-->

https 单向认证和双向认证配置的更多相关文章

  1. Tomcat添加HTTPS单向认证和双向认证

    前言 前一段时间有了解如何配置Tomcat服务为Https单向认证和双向认证,当时也做了一些记录,今天开始写博客,就把以前的记录拿出来整理下,分享给大家.本文没有介绍证书如何生成,会在下一篇博文里介绍 ...

  2. tomcat------https单向认证和双向认证

     一.https分为单向认证和双向认证: 单向认证就是说,只有客户端使用ssl时对服务器端的证书进行认证,也就是说,客户端在请求建立之前,服务器端会向客户端发送一个证书,一般情况下,这种证书都是由自己 ...

  3. SSL单向认证和双向认证说明

    SSL单向认证和双向认证说明 一.SSL双向认证具体过程 浏览器发送一个连接请求给安全服务器. 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器. 客户浏览器检查服务器送过来的证书是否是由自己 ...

  4. SSL的单向认证和双向认证

    原文地址:http://alvinhu.com/blog/2013/06/20/one-way-and-two-way-ssl-authentication/?utm_source=tuicool&a ...

  5. Https、OpenSSL自建CA证书及签发证书、nginx单向认证、双向认证及使用Java访问

    0.环境 本文的相关源码位于 https://github.com/dreamingodd/CA-generation-demo 必须安装nginx,必须安装openssl,(用apt-get upd ...

  6. https单向认证和双向认证区别

    关于证书 1.每个人都可以使用一些证书生成工具为自己的站点生成证书(比如jdk的keytool),大家称它为“自签名证书”,但是自己生成的证书是不被互联网承认的,所以浏览器会报安全提示,要求你手动安装 ...

  7. Https单向认证和双向认证介绍

    一.Http HyperText Transfer Protocol,超文本传输协议,是互联网上使用最广泛的一种协议,所有WWW文件必须遵循的标准.HTTP协议传输的数据都是未加密的,也就是明文的,因 ...

  8. 图解 https 单向认证和双向认证!

    来源: 一.Http HyperText Transfer Protocol,超文本传输协议,是互联网上使用最广泛的一种协议,所有WWW文件必须遵循的标准.HTTP协议传输的数据都是未加密的,也就是明 ...

  9. https单向认证和双向认证

    单向认证: .clinet<--server .clinet-->server .client从server处拿到server的证书,通过公司的CA去验证该证书,以确认server是真实的 ...

随机推荐

  1. Windows下安装Python lxml库(无废话版)

    python官网:python-2.7.12.amd64.msihttps://pypi.python.org/pypi/setuptools:setuptools-28.6.0.zipsetupto ...

  2. C语言 ---- 指针 iOS学习-----细碎知识点总结

    内存的访问形式:1.直接访问:通过变量名进行访问.2.间接访问:先找到变量存放的地址,然后根据地址去访问对应的内存空间. 指针--- // 定义一个整形指针变量,用来存储num1在内存中的地址    ...

  3. LeetCode Total Hamming Distance

    原题链接在这里:https://leetcode.com/problems/total-hamming-distance/ 题目: The Hamming distance between two i ...

  4. Python开发程序:RPC异步执行命令(RabbitMQ双向通信)

    RPC异步执行命令 需求: 利用RibbitMQ进行数据交互 可以对多台服务器进行操作 执行命令后不等待命令的执行结果,而是直接让输入下一条命令,结果出来后自动打印 实现异步操作 不懂rpc的请移步h ...

  5. k8s入门系列之guestbook快速部署

    k8s集群以及一些扩展插件已经安装完毕,本篇文章介绍一下如何在k8s集群上快速部署guestbook应用. •实验环境为集群:master(1)+node(4),详细内容参考<k8s入门系列之集 ...

  6. Cen0S下挂载设备

    在CentOS中,如果我们要查看光驱,U盘或者要把安装包挂载到某个文件夹,我写下我的一些理解. 所谓的挂载,就是把物理设备或者文件(包含安装文件,压缩包等等),与系统中的某个目录建立一个快捷方式,然后 ...

  7. mark asp.net mvc

    http://weblogs.asp.net/scottgu/Tags/MVC http://weblogs.asp.net/scottgu/asp-net-mvc-framework-part-1 ...

  8. Oracle中较长number型数值的科学计数显示问题

    表中有id列,类型为number(38).在sqlplus中查询的时候,查询结果的显示方式为科学计数法: ID ---------- 4.5572E+18 4.5574E+18 4.5585E+18 ...

  9. csuoj 1392: Number Trick

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1392 1392: Number Trick Time Limit: 1 Sec  Memory L ...

  10. Android中使用Handler造成内存泄露的分析和解决

    什么是内存泄露?Java使用有向图机制,通过GC自动检查内存中的对象(什么时候检查由虚拟机决定),如果GC发现一个或一组对象为不可到达状态,则将该对象从内存中回收.也就是说,一个对象不被任何引用所指向 ...