什么是https? 百度百科足够解释它:http://baike.baidu.com/view/14121.htm

工具:keytool (Windows下路径:%JAVA_HOME%/bin/keytool.exe)
环境:Windows8.1企业版、Tomcat-7.0.27、JDK1.6、IE11、Chrome

一、为服务器生成证书

C:\Windows\system32>keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\tomcat.keystore -validity 36500
输入keystore密码:
再次输入新密码:
您的名字与姓氏是什么?
  [Unknown]:  StoneXing
您的组织单位名称是什么?
  [Unknown]:  iFLYTEK
您的组织名称是什么?
  [Unknown]:  iFLYTEK
您所在的城市或区域名称是什么?
  [Unknown]:  合肥市
您所在的州或省份名称是什么?
  [Unknown]:  安徽省
该单位的两字母国家代码是什么
  [Unknown]:  CN
CN=StoneXing, OU=iFLYTEK, O=iFLYTEK, L=合肥市, ST=安徽省, C=CN 正确吗?  [否]:  y

正在为以下对象生成 1,024 位 RSA 密钥对和自签名证书 (SHA1withRSA)(有效期为 36,500 天):
         CN=StoneXing, OU=iFLYTEK, O=iFLYTEK, L=合肥市, ST=安徽省, C=CN
输入<tomcat>的主密码
        (如果和 keystore 密码相同,按回车):
[正在存储 D:\tomcat.keystore]

C:\Windows\system32>

“D:\tomcat.keystore”含义是将证书文件的保存路径,证书文件名称是tomcat.keystore(可自定义名称);
“-validity 36500”含义是证书有效期,36500表示100年,默认值是90天;

二、为客户端生成证书

1、生成客户端证书

C:\Windows\system32>keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore D:\client.key.p12
输入keystore密码:
再次输入新密码:
您的名字与姓氏是什么?
  [Unknown]:  StoneXing
您的组织单位名称是什么?
  [Unknown]:  iFLYTEK
您的组织名称是什么?
  [Unknown]:  iFLYTEK
您所在的城市或区域名称是什么?
  [Unknown]:  合肥
您所在的州或省份名称是什么?
  [Unknown]:  安徽省
该单位的两字母国家代码是什么
  [Unknown]:  CN
CN=StoneXing, OU=iFLYTEK, O=iFLYTEK, L=合肥, ST=安徽省, C=CN 正确吗?  [否]:  y

正在为以下对象生成 1,024 位 RSA 密钥对和自签名证书 (SHA1withRSA)(有效期为 90 天):
         CN=StoneXing, OU=iFLYTEK, O=iFLYTEK, L=合肥, ST=安徽省, C=CN
[正在存储 D:\client.key.p12]

C:\Windows\system32>

生成的两个文件:

2、安装客户端证书
双击客户端证书“client.key.p12”完成导入证书过程如下:

三、让服务器信任客户端证书

1、将客户端证书导出为CER文件
由于是双向SSL认证,服务器必须要信任客户端证书,因此,必须把客户端证书添加为服务器的信任认证。因不能直接将PKCS12格式的证书库导入服务器证书库,将客户端证书导出为一个单独的CER文件
keytool -export -alias mykey -keystore D:\client.key.p12 -storetype PKCS12 -storepass password -rfc -file D:\client.key.cer
注:password为客户端证书的密码

C:\Windows\system32>keytool -export -alias mykey -keystore D:\client.key.p12 -storetype PKCS12 -storepass 888888 -rfc -file D:\client.key.cer
保存在文件中的认证 <D:\client.key.cer>

C:\Windows\system32>

2、将CER文件导入到服务器的证书库
添加为一个信任证书使用命令如下:

C:\Windows\system32>keytool -import -v -file D:\client.key.cer -keystore D:\tomcat.keystore
输入keystore密码:
所有者:CN=StoneXing, OU=iFLYTEK, O=iFLYTEK, L=合肥, ST=安徽省, C=CN
签发人:CN=StoneXing, OU=iFLYTEK, O=iFLYTEK, L=合肥, ST=安徽省, C=CN
序列号:52e07723
有效期: Thu Jan 23 09:57:55 CST 2014 至Wed Apr 23 09:57:55 CST 2014
证书指纹:
         MD5:15:29:58:68:8D:63:E1:00:8E:E6:EC:5E:AD:23:79:38
         SHA1:B7:EF:B9:67:BD:56:95:82:3D:D8:14:0D:20:69:F0:C8:60:98:31:9A
         签名算法名称:SHA1withRSA
         版本: 3
信任这个认证? [否]:  y
认证已添加至keystore中
[正在存储 D:\tomcat.keystore]

C:\Windows\system32>

3、检查安装结果
通过list命令查看服务器的证书库,可以看到两个证书,一个是服务器证书,一个是受信任的客户端证书:
keytool -list -keystore D:\tomcat.keystore (tomcat为你设置服务器端的证书名)。

C:\Windows\system32>keytool -list -keystore D:\tomcat.keystore
输入keystore密码:

Keystore 类型: JKS
Keystore 提供者: SUN

您的 keystore 包含 2 输入

tomcat, 2014-1-23, PrivateKeyEntry,
认证指纹 (MD5): 4B:71:06:02:7C:35:F8:BF:B1:24:E2:68:8F:65:75:15
mykey, 2014-1-23, trustedCertEntry,
认证指纹 (MD5): 15:29:58:68:8D:63:E1:00:8E:E6:EC:5E:AD:23:79:38

C:\Windows\system32>

四、让客户端信任服务器证书

1、把服务器证书导出为CER文件
由于是双向SSL认证,客户端也要验证服务器证书,因此,必须把服务器证书添加到浏览的“受信任的根证书颁发机构”。由于不能直接将keystore格式的证书库导入,必须先把服务器证书导出为一个单独的CER文件,使用如下命令:
keytool -keystore D:\home\tomcat.keystore -export -alias tomcat -file D:\home\tomcat.cer (tomcat为你设置服务器端的证书名)。

C:\Windows\system32>keytool -keystore D:\tomcat.keystore -export -alias tomcat -file D:\tomcat.cer
输入keystore密码:
保存在文件中的认证 <D:\tomcat.cer>

C:\Windows\system32>

2、在客户端安装服务器证书
双击“tomcat.cer”,按照提示安装证书,将证书填入到“受信任的根证书颁发机构”。

3、检查安装结果
IE -> Internet选项 -> 内容 -> 证书

五、配置Tomcat服务器

  1.  
    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
  2.  
    maxThreads="150" scheme="https" secure="true"
  3.  
    clientAuth="false" sslProtocol="TLS"
  4.  
    keystoreFile="D:\\tomcat.keystore" keystorePass="888888"
  5.  
    truststoreFile="D:\\tomcat.keystore" truststorePass="888888" />

注意服务端证书名保持一致
属性说明:
clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证
keystoreFile:服务器证书文件路径
keystorePass:服务器证书密码
truststoreFile:用来验证客户端证书的根证书,此例中就是服务器证书
truststorePass:根证书密码

六、测试

https://localhost:8443/

服务器的证书与网址不相符问题需要理解浏览器做了什么:

1、浏览器将自己支持的一套加密规则发送给网站。
2、网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
3、获得网站证书之后浏览器要做以下工作:
      a)  验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
      b)  如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
      c)  使用约定好的HASH计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。

引用:http://bbs.csdn.net/topics/390685015

个人分类: Java

原 用Tomcat服务器配置https双向认证过程实战的更多相关文章

  1. Tomcat服务器配置https双向认证(使用keytool生成证书)

    一,HTTPS原理   1,HTTP.HTTPS.SSL.TLS介绍与相互关系 (1)HTTP:平时浏览网页时候使用的一种协议.HTTP协议传输的数据都是未加密的(明文),因此使用HTTP协议传输隐私 ...

  2. Keytool配置 Tomcat的HTTPS双向认证

    Keytool配置 Tomcat的HTTPS双向认证 证书生成 keytool 简介 Keytool是一个Java数据证书的管理工具, Keytool将密钥(key)和证书(certificates) ...

  3. Tomcat 配置 HTTPS双向认证

    Tomcat 配置 HTTPS 双向认证指引说明: � 本文档仅提供 Linux 操作系统下的指引 � 在阅读本指引前请您在 Linux 部署 JDK 和 Tomcatserver为了 Tomcat ...

  4. Tomcat下HTTPS双向认证配置以及客户端调用案例

    1:生成服务器端的keystore和truststore文件 (1)以jks格式生成服务器端包含Public key和Private Key的keystore文件 keytool -genkey -a ...

  5. HTTPS开发(SSL--用Tomcat服务器配置https双向认证)

    准备工作: 1.windows+R  cmd 打开命令窗口 2.输入:cd C:\Program Files\Java\jdk1.7.0_80\bin 进入路径找到keytool工具 为服务器生成证书 ...

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

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

  7. httpd设置HTTPS双向认证

    去年用tomcat.jboss配置过HTTPS双向认证,那时候主要用的是JDK自带的keytool工具.这次是用httpd + openssl,区别比较大 在网上搜索了很多文章,发现全面介绍的不多,或 ...

  8. Android Https双向认证 + GRPC

    keywords:android https 双向认证android GRPC https 双向认证 ManagedChannel channel = OkHttpChannelBuilder.for ...

  9. 双向认证 HTTPS双向认证

    [微信支付]微信小程序支付开发者文档 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_3 HTTPS双向认证使用说明 ...

随机推荐

  1. pandas将DataFrame的列变成行索引

    pandas提供了set_index方法可以将DataFrame的列(多列)变成行索引,通过reset_index方法可以将层次化索引的级别会被转移到列里面. 1.DataFrame的set_inde ...

  2. java基础解析系列(一)---String、StringBuffer、StringBuilder

    java基础解析系列(一)---String.StringBuffer.StringBuilder 前言:本系列的主题是平时容易疏忽的知识点,只有基础扎实,在编码的时候才能更注重规范和性能,在出现bu ...

  3. Pandas的concat方法

    在此我用的concat作用是加入新的记录,存储数据来用过的,不知道数据量大时候,效率会怎样 # 使用pandas来保存数据 df1 = pd.DataFrame([poem], columns=['p ...

  4. hibernate注解(三)1+N问题

    一.什么时候会遇到1+N的问题? 前提:Hibernate默认表与表的关联方法是fetch="select",不是fetch="join",这都是为了懒加载而准 ...

  5. easyUi引入方法

    1:创建一个动态web工程:    去官网http://www.jeasyui.net/download/下载官网文档    我去官网下载的最新版本,个人根据自己的需求下载即可.2:在webConte ...

  6. Shell中的表达式及IF

    #!/bin/bash #你值得收藏的四则表达式运算. val1=1 val2=1 val3=1 val4=1 val5=1 val6=1 val7=1 let val1++ ((val2++)) v ...

  7. mysql 数据库数据订正

    mysql 数据库数据订正 http://blog.itpub.net/22664653/viewspace-717175/ 工作过程中时常遇到数据订正的需求,该操作本身不难.操作时要求能够保持回滚~ ...

  8. [py]python自省工具

    参考 在日常生活中,自省(introspection)是一种自我检查行为.自省是指对某人自身思想.情绪.动机和行为的检查.伟大的哲学家苏格拉底将生命中的大部分时间用于自我检查,并鼓励他的雅典朋友们也这 ...

  9. (转)ElasticSearch Java Api-检索索引库

    上篇博客记录了如何用java调用api把数据写入索引,这次记录下如何搜索. 一.准备数据 String data1 = JsonUtil.model2Json(new Blog(1, "gi ...

  10. Period(sdut2476)

    [题目大意]:给定一个字符串,求到哪一位时的字串是前几位循环组成的,并求出循环次数. 思路:求每个前缀的最小循环周:从i到n枚举len,如果len%(len-next[len])==0,则这个前缀是由 ...