惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
L
LangChain Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Blog — PlanetScale
Blog — PlanetScale
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Docker
T
Tailwind CSS Blog
T
The Blog of Author Tim Ferriss
U
Unit 42
B
Blog
N
Netflix TechBlog - Medium
T
Threat Research - Cisco Blogs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
O
OpenAI News
M
MIT News - Artificial intelligence
D
DataBreaches.Net
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
L
LINUX DO - 热门话题
C
CERT Recently Published Vulnerability Notes
V
Visual Studio Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
N
News and Events Feed by Topic
Vercel News
Vercel News
T
Tenable Blog
Security Latest
Security Latest
C
Check Point Blog
云风的 BLOG
云风的 BLOG
PCI Perspectives
PCI Perspectives
月光博客
月光博客
TaoSecurity Blog
TaoSecurity Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Project Zero
Project Zero
雷峰网
雷峰网
IT之家
IT之家
H
Hacker News: Front Page
Microsoft Security Blog
Microsoft Security Blog
B
Blog RSS Feed
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Last Week in AI
Last Week in AI
G
Google Developers Blog
Forbes - Security
Forbes - Security
The Register - Security
The Register - Security
Cyberwarzone
Cyberwarzone
小众软件
小众软件
Martin Fowler
Martin Fowler
K
Kaspersky official blog
P
Proofpoint News Feed
T
Threatpost
Google Online Security Blog
Google Online Security Blog
Microsoft Azure Blog
Microsoft Azure Blog

博客园 - 高山流水200808

ubuntu安装HermesAgent接入Nous平台小米大模型和微信通道配置 沈阳2025中考各区各校人数估算 沈阳2025公办普高率分析 思科Cisco ASA5506-x防火墙内部用户无法使用PPTP连接到VPN - 高山流水200808 专利事务所信息Python爬取 对CSDN的理性吐槽 CSDN博客已经打不开了 大连交大教务一键教学评价 apache2.4+tomcat8+jk1.2.40集群配置 使用Fiddle监听HTTPS网页 证书吊销 window下Apache-http-server(httpd-2.4.12)安装与配置 tomcat7.0.55配置HTTP强制跳转到HTTPS CentOS6.6升级openssl到1.0.2a openssl生成证书链多级证书 tomcat7.0.55配置单向和双向HTTPS连接(二) KeyStore和TrustStore Widows下利用OpenSSL生成证书 HTTP/1.1标准请求方法和状态码
tomcat7.0.55配置单向和双向HTTPS连接
高山流水200808 · 2015-05-11 · via 博客园 - 高山流水200808

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:20

C:\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 -storetype
 PKCS12 -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 -keystore
 server.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:FB
         SHA1: F4:8B:10:4A:3F:B6:EE:BF:A7:29:52:BC:37:C8:A9:D9:81:A4:2F:20
         SHA256: 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:78

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选项里面仍然看不到。