HTTPS配置中分为单向连接和双向连接,单向连接只需要服务器安装证书,客户端不需要,双向连接需要服务器和客户端都安装证书

下面的配置都没有用CA签名来配置,都不能用于生产环境,实际配置中是需要CA的,并且第二个配置增加客户端证书时需要修改server.xml,这在生产环境中是行不通的,后面的博文会更新说明

博文更新:tomcat7.0.55配置单向和双向HTTPS连接(二)

一、单向HTTPS连接

检查命令行当前工作目录(C:\Users\test\)下的有无.keystore文件,如果有,则删除。

先测试两个keytool命令

1、keytool -help

结果如下

C:\Users\test>keytool -help
密钥和证书管理工具 命令: -certreq 生成证书请求
-changealias 更改条目的别名
-delete 删除条目
-exportcert 导出证书
-genkeypair 生成密钥对
-genseckey 生成密钥
-gencert 根据证书请求生成证书
-importcert 导入证书或证书链
-importpass 导入口令
-importkeystore 从其他密钥库导入一个或所有条目
-keypasswd 更改条目的密钥口令
-list 列出密钥库中的条目
-printcert 打印证书内容
-printcertreq 打印证书请求的内容
-printcrl 打印 CRL 文件的内容
-storepasswd 更改密钥库的存储口令 使用 "keytool -command_name -help" 获取 command_name 的用法

2、keytool -genkey -help

C:\Users\test>keytool -genkey -help
keytool -genkeypair [OPTION]... 生成密钥对 选项: -alias <alias> 要处理的条目的别名
-keyalg <keyalg> 密钥算法名称
-keysize <keysize> 密钥位大小
-sigalg <sigalg> 签名算法名称
-destalias <destalias> 目标别名
-dname <dname> 唯一判别名
-startdate <startdate> 证书有效期开始日期/时间
-ext <value> X. 扩展
-validity <valDays> 有效天数
-keypass <arg> 密钥口令
-keystore <keystore> 密钥库名称
-storepass <arg> 密钥库口令
-storetype <storetype> 密钥库类型
-providername <providername> 提供方名称
-providerclass <providerclass> 提供方类名
-providerarg <arg> 提供方参数
-providerpath <pathlist> 提供方类路径
-v 详细输出
-protected 通过受保护的机制的口令 使用 "keytool -help" 获取所有可用命令

3、使用keytool -genkey命令生成密钥对,别名为tomcat,默认生成在当前目录,这里的口令不回显,至少输入6位,笔者输入的是12345678

C:\Users\test>keytool -genkey -alias tomcat -keyalg RSA
输入密钥库口令:
您的名字与姓氏是什么?
[Unknown]: localhost
您的组织单位名称是什么?
[Unknown]: com
您的组织名称是什么?
[Unknown]: co
您所在的城市或区域名称是什么?
[Unknown]: Dalian
您所在的省/市/自治区名称是什么?
[Unknown]: Liaoling
该单位的双字母国家/地区代码是什么?
[Unknown]: CN
CN=localhost, OU=com, O=co, L=Dalian, ST=Liaoling, C=CN是否正确?
[否]: y 输入 <tomcat> 的密钥口令
(如果和密钥库口令相同, 按回车): C:\Users\test>

命令完成之后会在C:\Users\test目录下生成一个.keystore文件

4、把生成的.keystore文件剪切到tomcat的conf目录

如果习惯使用命令,可以输入如下命令

C:\Users\test>move .keystore D:\apache-tomcat-7.0.\conf
移动了 个文件。

5、查看conf\server.xml
找到port="8443"的例子,把注释中间的内容复制出来。笔者找到的内容如下

    <!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->

把<!-- -->之间的内容复制出来,然后添加上keystore文件路径和keystore密码

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="conf/.keystore" keystorePass="12345678"/>

然后用浏览器打开如下网址

https://localhost:8443/

如果浏览器提示证书不受信任,点继续浏览即可。单向连接配置完成。

上文中回避了一个问题:密钥库使用的密钥与后面服务器使用的证书<tomcat>密钥不一致时,上面的配置启动会报错。

解决方法,在server.xml的<connector>标签里加上别名keyAlias和别名密码keyPass,如果创建.keystore使用的密钥库密钥为12345678,别名为tomcat密钥为12341234,则配置如下:

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="conf/.keystore" keystorePass="12345678"
keyAlias="tomcat" keyPass="12341234" />

二、双向HTTPS连接

下面我们来配置双向HTTPS连接

为了更清晰的表述,下面这张图代表了整个流程(虽然不是流程图)

1、创建服务器密钥库,密钥库类型为JKS(默认就是JKS,也可以通过-storetype参数指定),名称为server.keystore,同时创建第一个条目,别名为tomcat

命令如下

keytool -genkey -v -alias tomcat -keyalg RSA -storetype JKS -validity   -keystore server.keystore -dname "CN=localhost,OU=Unknown,O=Unknown,L=Unknown,ST=Unknown,c=Unknown" -storepass  -keypass 

结果如下

C:\Users\test>keytool -genkey -v -alias tomcat -keyalg RSA -storetype JKS -v
alidity -keystore server.keystore -dname "CN=localhost,OU=Unknown,O=Unknow
n,L=Unknown,ST=Unknown,c=Unknown" -storepass 12345678 -keypass 12341234
正在为以下对象生成 , 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 ,
天):
CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
[正在存储server.keystore] C:\Users\test>

2、创建客户端密钥库,密钥库类型为PKCS12(通过-storetype参数指定),名称为client.p12,同时创建第一个条目,别名为client1

创建命令

keytool -genkey -v -alias client1 -keyalg RSA -storetype PKCS12   -validity   -keystore client.p12 -dname "CN=client1,OU=Unknown,O=Unknown,L=Unknown,ST=Unknown,c=Unknown" -storepass 

结果

C:\Users\test>keytool -genkey -v -alias client1 -keyalg RSA -storetype PKCS1
-validity -keystore client.p12 -dname "CN=client1,OU=Unknown,O=Unknown
,L=Unknown,ST=Unknown,c=Unknown" -storepass 12345678
正在为以下对象生成 , 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 ,
天):
CN=client1, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
[正在存储client.p12] C:\Users\test>

查看命令

keytool -list -storetype PKCS12 -keystore client.p12 -storepass 

结果

C:\Users\test>keytool -list -storetype PKCS12 -keystore client.p12 -storepas
s 密钥库类型: PKCS12
密钥库提供方: SunJSSE 您的密钥库包含 个条目 client1, --, PrivateKeyEntry,
证书指纹 (SHA1): F4:8B::4A:3F:B6:EE:BF:A7:::BC::C8:A9:D9::A4:2F: C:\Users\test>

3、将客户端的条目1导出为cer证书,导出的cer证书供浏览器导入使用,在后一步中导入到服务器证书库让服务器信任客户端的证书

命令

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

结果

C:\Users\test>keytool -export -alias client1 -keystore client.p12 -storetype
PKCS12 -storepass -rfc -file client1.cer
存储在文件 <client1.cer> 中的证书 C:\Users\test>

4、将上一步导出的cer证书导入到服务器密钥库server.keystore

命令

keytool -import -v -alias sclient1 -file client1.cer -keystore server.keystore -storepass 

结果

C:\Users\test>keytool -import -v -alias sclient1 -file client1.cer -keystore
server.keystore -storepass
所有者: CN=client1, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
发布者: CN=client1, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
序列号: 50035e11
有效期开始日期: Sun May :: CST , 截止日期: Wed May :: CST 证书指纹:
MD5: :FC:B0::F4:AB:E3::::3F:7D:::C2:FB
SHA1: F4:8B::4A:3F:B6:EE:BF:A7:::BC::C8:A9:D9::A4:2F:
SHA256: AB:3C::C0:1E:::2B:E7:D9:::B1:::F3::FD:FB::CA:
::::EA:A7:7B::9C:A2:A7
签名算法名称: SHA256withRSA
版本: 扩展: #: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
: 6D 0C A0 F7 D7 9B 9C F9 CC A5 m...............
: 1A 6C ...l
]
] 是否信任此证书? [否]: y
证书已添加到密钥库中
[正在存储server.keystore] C:\Users\test>

查看是否导入成功,命令

keytool -list -keystore server.keystore -storepass 

结果

C:\Users\test>keytool -list -keystore server.keystore -storepass 

密钥库类型: JKS
密钥库提供方: SUN 您的密钥库包含 个条目 sclient1, --, trustedCertEntry,
证书指纹 (SHA1): F4:8B::4A:3F:B6:EE:BF:A7:::BC::C8:A9:D9::A4:2F:
tomcat, --, PrivateKeyEntry,
证书指纹 (SHA1): ::9E::D2:EB:::E8:8E:1E:F5::C6:AC:C5::7D:: C:\Users\test>

上述过程完成后,证书生成工作做完了,在C:\Users\test目录可以看到server.keystore、client.p12、client1.cer三个文件

1.下面配置tomcat

将server.keystore复制到D:\apache-tomcat-7.0.55\conf目录下,并对server.xml加入如下配置

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile="conf/server.keystore" keystorePass="12345678"
keyAlias="tomcat" keyPass="12341234"
truststoreFile="conf/server.keystore" truststorePass="12345678"/>

2.将client1.cer证书导入浏览器

火狐:菜单-->选项-->查看证书-->您的证书-->导入  在对话框中找到client1.cer即可

火狐支持的导入方式:PKCS12文件(*.p12;pfx)、证书文件(*.p7b;*.crt;*.cert;*.cer;*.pem;*.der)

IE11:工具-->Internet选项-->内容-->证书-->个人-->导入-->下一步-->浏览中找到client.p12即可

IE11支持的导入方式如下

X.509证书(*.cer;*.crt)、个人信息交换(*.pfx;*.p12)、证书信任列表(*.stl)、证书吊销列表(*.crl)、Microsoft 系列证书存储(*.sst)、PKCS #7 证书(*.spc;p7b)
其中下列各式可以在一个文件中存储多个证书(即证书存储库)
个人信息交换- PKCS #12(.PFX,.P12)
加密消息语法标准- PKCS #7 证书(.P7B)
Microsoft 系列证书存储(.SST)

注:上文生成的cer证书导入IE11时不能导入IE证书的个人存储区,后来直接用p12证书导入成功,经过测试IE11证书的个人存储区只能导入PCKS #12(pfx,p12)格式,其他格式全部拒绝,因此上文生成cer显得多余了,完全可以用client.p12导入IE和火狐。

追加实验:虽然可以通过mmc.exe(windows管理控制台)可以将cer证书强制导入IE11证书的个人存储区,但是IE并不会接受这个证书,在IE选项里面仍然看不到。

tomcat7.0.55配置单向和双向HTTPS连接的更多相关文章

  1. tomcat7.0.55配置单向和双向HTTPS连接(二)

    上一篇文章:tomcat7.0.55配置单向和双向HTTPS连接 只是简要的配置了一下HTTPS,还有许多问题没有解决,本篇来解决这些文件 首先按照这篇文章:Widows下利用OpenSSL生成证书来 ...

  2. tomcat7.0.55配置HTTP强制跳转到HTTPS

    首先需要配置好HTTPS单向或双向链接 参考: tomcat7.0.55配置单向和双向HTTPS连接(二) 然后编辑tomcat的conf目录下的web.xml 在<welcome-file-l ...

  3. Apache2.2+Tomcat7.0整合配置详解

    一.简单介绍 Apache.Tomcat Apache HTTP Server(简称 Apache),是 Apache 软件基金协会的一个开放源码的网页服务器,可以在 Windows.Unix.Lin ...

  4. JDK7+EclipseIDE+Tomcat7.0.55++mybatis3+Maven3.2.2 构建webapp 的java 的maven项目

    构建Maven项目 工具 JDK7+EclipseIDE+Tomcat7.0.55++mybatis3+Maven3.2.2 JDK 下载地址 http://www.oracle.com/techne ...

  5. m.Tomcat使用openssl走APR通道配置单向和双向认证

    引用自: http://blog.csdn.net/gtuu0123/article/details/5827800(Tomcat的SSL单向认证)  http://blog.csdn.net/gtu ...

  6. Tomcat7.0安装配置详细

    说明:Tomcat服务器上一个符合J2EE标准的Web服务器,在tomcat中无法运行EJB程序,如果要运行可以选择能够运行EJB程序的容器WebLogic,WebSphere,Jboss等:Tomc ...

  7. Apache2.4+Tomcat7.0整合配置详解

    一.简单介绍 Apache.Tomcat Apache HTTP Server(简称 Apache),是 Apache 软件基金协会的一个开放源码的网页服务器,可以在 Windows.Unix.Lin ...

  8. Linux Tomcat7.0安装配置实践总结

    一,安装JDk 先下载jdk,链接http://www.oracle.com/technetwork/java/javase/downloads/index.html,选择相对应平台的JDK.由于笔者 ...

  9. Tomcat7.0安装配置

    很久没有通过博客对学习所得进行记录了. 现在将使用Tomcat的一些经验和心得写到这里,作为记录和备忘.如果有朋友看到,也请不吝赐教. 首先,我个人使用的是apache-tomcat-7.0.27你可 ...

随机推荐

  1. 转载:将画布(canvas)图像保存成本地图片的方法

    之前我曾介绍过如何将HTML5画布(canvas)内容转变成图片形式,方法十分简单.但后来我发现只将canvas内容转变成图片输出还不够,如何能将转变后的图片保存到本地呢? 其实,这个方法也是非常简单 ...

  2. GoF23种设计模式之行为型模式之责任链模式

    一.概述 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并且沿着这条链传递请求,直到有一个对象处理它为止.其设计思想是:给对多个对象处理一个请求的机会, ...

  3. MySQL练习50题

    介绍一个学习SQL的网站:https://sqlbolt.com/ 习题来源于网络,SQL语句是自己的练习答案,部分参考了网络上的答案. 花了一晚上的时间做完,个人认为其中的难点有:分组提取前几名的数 ...

  4. JAVA基础篇—继承

    父类Vehicle package com.car; public class Vehicle { final String brand;// String color;// double speed ...

  5. 设置ubuntu12.04的dasher-自动隐藏,左上角

    点击右上角的齿轮,--> “system setting”--“Appearance” 在“Look”标签中: Theme:Ambiance Launch icon size :32 选择桌面背 ...

  6. #ifndef、#def、#endif说明

    你所遇到的这几个宏是为了进行条件编译.一般情况下,源程序中所有的行都参加编译.但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一 部分内容指定编译的条件,这就是“条件编译”.有时,希望 ...

  7. Java-列出所有系统属性

    package com.tj; import java.util.Enumeration; import java.util.Properties; public class MyClass impl ...

  8. Verlet Integration

        Verlet Integration Verlet 积分法是一种用于求解牛顿运动方程的数值方法,被广泛运用于动力学模拟以及视频游戏中.尔莱算法的优点在于:数值稳定性比简单的欧拉方法高很多,并保 ...

  9. Python socket粘包问题(最终解决办法)

    套接字: 就是将传输层以下的协议封装成子接口 对于应用程序来说只需调用套接字的接口,写出的程序自然是遵循tcp或udp协议的 实现第一个功能个:实现:通过客户端向服务端发送命令,调取windows下面 ...

  10. vs2015代码图

    可以看到代码的调用关系. 知乎文章:IDE 而言,是 Xcode 的技术比较先进还是 Visual Studio?