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.509 扩展-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.55\conf
移动了         1 个文件。

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 3650  -keystore server.keystore -dname "CN=localhost,OU=Unknown,O=Unknown,L=Unknown,ST=Unknown,c=Unknown" -storepass 12345678 -keypass 12341234

结果如下

C:\Users\test>keytool -genkey -v -alias tomcat -keyalg RSA -storetype JKS -v
alidity 3650  -keystore server.keystore -dname "CN=localhost,OU=Unknown,O=Unknow
n,L=Unknown,ST=Unknown,c=Unknown" -storepass 12345678 -keypass 12341234
正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 3,650天):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 3650  -keystore client.p12 -dname "CN=client1,OU=Unknown,O=Unknown,L=Unknown,ST=Unknown,c=Unknown" -storepass 12345678

结果

C:\Users\test>keytool -genkey -v -alias client1 -keyalg RSA -storetype PKCS1
2   -validity 3650  -keystore client.p12 -dname "CN=client1,OU=Unknown,O=Unknown
,L=Unknown,ST=Unknown,c=Unknown" -storepass 12345678
正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 3,650天):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 12345678

结果

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

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

命令

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

结果

C:\Users\test>keytool -export -alias client1 -keystore client.p12 -storetypePKCS12 -storepass 12345678 -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 12345678

结果

C:\Users\test>keytool -import -v -alias sclient1 -file client1.cer -keystoreserver.keystore -storepass 12345678
所有者: 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 10 23:48:18 CST 2015, 截止日期: Wed May 07 23:48:18 CST
2025
证书指纹:MD5: 12:FC:B0:83:F4:AB:E3:23:09:95:3F:7D:72:01:C2:FBSHA1: F4:8B:10:4A:3F:B6:EE:BF:A7:29:52:BC:37:C8:A9:D9:81:A4:2F:20SHA256: AB:3C:44:C0:1E:83:15:2B:E7:D9:93:33:B1:71:34:F3:85:FD:FB:64:CA:
58:96:16:40:EA:A7:7B:41:9C:A2:A7签名算法名称: SHA256withRSA版本: 3扩展:#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 6D 0C 03 84 A0 80 F7 05   D7 9B 9C F9 96 CC 03 A5  m...............
0010: 05 1A 92 6C                                        ...l
]
]是否信任此证书? [否]:  y
证书已添加到密钥库中
[正在存储server.keystore]C:\Users\test>

查看是否导入成功,命令

keytool -list -keystore server.keystore -storepass 12345678

结果

C:\Users\test>keytool -list -keystore server.keystore -storepass 12345678密钥库类型: JKS
密钥库提供方: SUN您的密钥库包含 2 个条目sclient1, 2015-5-10, trustedCertEntry,
证书指纹 (SHA1): F4:8B:10:4A:3F:B6:EE:BF:A7:29:52:BC:37:C8:A9:D9:81:A4:2F:20
tomcat, 2015-5-10, PrivateKeyEntry,
证书指纹 (SHA1): 66:55:9E:65:D2:EB:17:62:E8:8E:1E:F5:01:C6:AC:C5:86:7D:52:78C:\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选项里面仍然看不到。

转载于:https://www.cnblogs.com/gsls200808/p/4492896.html

tomcat7.0.55配置单向和双向HTTPS连接相关推荐

  1. 腾讯云轻量型服务器安装Nginx且SSL证书配置实现HTTP和HTTPS连接

    因为开发微信小程序需要https连接所以买了一个腾讯云轻量型服务器.在配置之前需要先购买服务器->申请域名->配置解析域名->申请SSL证书.在几分钟前刚实现http和https的网 ...

  2. Tomcat7.0安装配置

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

  3. Ubuntu下利用JDK的Keytool配置Tomcat7.0的SSL协议

    Ubuntu下利用JDK的Keytool配置Tomcat7.0的SSL协议: 1.用JDK自带的Keytool生成服务器证书:   1)打开终端控制台,转向tomcat主目录,执行生成keystore ...

  4. HTTPS原理、单向和双向认证

    参考文章:https://blog.51cto.com/11883699/2160032 https://www.songma.com/news/txtlist_i39807v.html 众所周知,W ...

  5. Ubuntu 10.10配置JRE、JDK、Eclipse和Tomcat7.0.5

    1.安装JDK 1.1.到官网下载相关的JDK,这里下载的是 jdk-6u23-linux-i586.bin. 网站:http://www.oracle.com/technetwork/java/ja ...

  6. wamp3.0.6配置https + Nginx转发 + 满足微信小程序的接口调用域名

    环境:winserver2012 R2 wamp环境 安卓无法发起请求https://www.jianshu.com/p/61695bfae5f7?utm_campaign 一.  wamp3.0.6 ...

  7. tomcat7.0.81 linux,Linux/CentOS7.0下安装配置Tomcat8.0

    Linux/CentOS7.0下安装配置Tomcat8.0 一.配置Tomcat安装环境 1.下载对应的jdk 我用的是64位的下载地址: 下载将jdk加压后放到/usr/local目录下: 2.建立 ...

  8. java9.0.4配置_Tomcat 9.0 安装配置

    本文转自:http://blog.sina.com.cn/s/blog_15126e2170102w5o8.html 一.JDK的安装与配置 1.从官网下载jdk,注意是jdk不是jre.最好从官网下 ...

  9. Tomcat双向Https验证搭建,亲自实现与主流浏览器、Android/iOS移动客户端超安全通信

    紧接着<Tomcat单向Https验证搭建,亲自实现与主流浏览器.Android/iOS移动客户端安全通信>,此处演示下更安全的双向Https认证的通信机制,为了清晰明了,以下进行单独描述 ...

最新文章

  1. Navicat使用Instant Client创建连接到Oracle数据库的正确姿势
  2. [Java多线程]-J.U.C.atomic包下的AtomicInteger,AtomicLong等类的源码解析
  3. 关于 MSDN 收藏夹
  4. JUC锁-ReentrantReadWrite(五)
  5. 在Hotspot JVM中跟踪过多的垃圾回收
  6. SAP License:药店ERP系统如何实施
  7. 施一公:论文和科技实力是两回事,大家千万要分开
  8. JAVA中LIST 和 MAP的区别
  9. 计算机老提示安全证书到期,安全证书过期,教您怎么解决网站安全证书过期
  10. 程序员如何向领导提涨薪加薪
  11. 【基金申报】研究目标、内容、方案之间的区别,一文全了解
  12. GitHub上最火的Android开源项目整理
  13. 单例模式,异常和模块相关
  14. HDU-6194 string string string
  15. 【源码在文末】SpringSession实战使用(基于SpringBoot项目)
  16. 关于使用深度学习进行三维点云几何压缩
  17. 谈谈目前工作的收获和不足
  18. SQLServer 服务启动失败
  19. 你可能不知道的——史上最全Windows安全工具锦集
  20. MT4开发文档之 Server API: Hooks and Trade Functions

热门文章

  1. fiddler命令cls/select
  2. react 引入html文件_React最快速上手教程
  3. python制作日历并保存成excel_利用Python自动化生成逼格高的日历!简单又实用
  4. java在底层捕获异常_Java正确捕获异常的真实类
  5. GCC Command Options
  6. matlab中箭头详细设置
  7. 微信开发者接入php,微信开发系之新手接入指南
  8. hibernate4调用mysql存储过程_Hibernate4.x执行mysql的存储过程
  9. 文本分类的14种算法
  10. python网页数据处理_python 处理html页面爬虫数据