Tomcat 7中配置SSL双向认证

本贴最后更新于 4220 天前,其中的信息可能已经时异事殊

在Tomcat 7 中配置 SSL 双向认证是相当容易的,本文将介绍如何使用 JDK 的 keytool 来为 Tomcat 配置双向SSL 认证。

系统需求: 

JDK 6.0

Tomcat 7.0.12

1. 为服务器生成证书

使用keytool 为 Tomcat 生成证书,假定目标机器的域名是“ localhost ”, keystore 文件存放在“d:\tomcat.keystore ”,口令为“ password ”,使用如下命令生成:

keytool -genkey -v  -alias boors -keyalg RSA -validity 3650  -keystore d:\cert\boors.keystore -dname "CN=localhost,OU=boor,O=abchina,L=beijing,ST=beijing,c=cn" -storepass password -keypass password

-dname 中:

OU 表示组织单位名称   

O  表示组织名称

L  您所在城市或区域

ST 表示省份或州

c 表示国家代码

如果Tomcat 所在服务器的域名不是“ localhost ”,应改为对应的域名,如“ www.sina.com.cn ”,否则浏览器会弹出警告窗口,提示用户证书与所在域不匹配。在本地做开发测试时,应填入“ localhost ”

 

 

2. 为客户端生成证书

下一步是为浏览器生成证书,以便让服务器来验证它。为了能将证书顺利导入至IE 和 Firefox ,证书格式应该是PKCS12 ,因此,使用如下命令生成:

keytool  -genkey -v -alias boorc -keyalg RSA -storetype PKCS12 -validity 3650  -keystore   d:\cert\boorc.p12  -dname "CN=boorc,OU=boor,O=abchina,L=beijing,ST=beijing,c=cn" -storepass password -keypass password

 

对应的证书库存放在“d:\cert\boorc.p12 ”,客户端的 CN 可以是任意值。稍候,我们将把这个“boorc.p12 ”证书库导入到 IE 和 Firefox 中。

3. 让服务器信任客户端证书

由于是双向SSL 认证,服务器必须要信任客户端证书,因此,必须把客户端证书添加为服务器的信任认证。由于不能直接将 PKCS12 格式的证书库导入,我们必须先把客户端证书导出为一个单独的 CER 文件(公钥),使用如下命令:

keytool -export  -alias boorc -keystore d:\cert\boorc.p12 -storetype PKCS12 -storepass password -rfc -file d:\cert\boorc.cer

 

通过以上命令,客户端证书就被我们导出到“d:\cert\boorc.cer ”文件了。下一步,是将该文件导入到服务器的证书库,添加为一个信任证书:

keytool -import -v -file d:\cert\boorc.cer -keystore d:\cert\boors.keystore -storepass password

 

输出如下:


所有者:CN=boorc, OU=boor, O=abchina, L=beijing, ST=beijing, C=cn
签发人:CN=boorc, OU=boor, O=abchina, L=beijing, ST=beijing, C=cn
序列号:52187734
有效期: Sat Aug 24 17:04:52 CST 2013 至Tue Aug 22 17:04:52 CST 2023
证书指纹:
         MD5:5B:9B:E0:8E:57:C4:1C:68:3A:E7:B8:91:CE:39:0C:FF
         SHA1:10:BC:35:5D:0B:81:A8:04:DB:A1:1F:A0:DC:EB:80:83:0C:FB:1B:A7
         签名算法名称:SHA1withRSA
         版本: 3
信任这个认证? [否]:  y
认证已添加至keystore中
[正在存储 d:\cert\boors.keystore]

 

通过list 命令查看服务器的证书库,我们可以看到两个输入,一个是服务器证书,一个是受信任的客户端证书:

keytool –list -keystore d:\cert\boors.keystore -storepass password

输出如下:

C:\Users\wllb>keytool -list -keystore d:\cert\boors.keystore -storepass password

Keystore 类型: JKS
Keystore 提供者: SUN

您的 keystore 包含 2 输入

boors, 2013-8-24, PrivateKeyEntry,
认证指纹 (MD5): 3E:F5:CA:D4:B4:CF:D3:50:2C:1C:99:4C:BC:D8:21:31
mykey, 2013-8-24, trustedCertEntry,
认证指纹 (MD5): 1B:AF:6A:3B:54:D2:5E:AF:D7:0E:94:8F:F7:FE:7C:4F

4. 配置Tomcat 服务器

打开Tomcat 根目录下的 /conf/server.xml ,找到如下配置段,修改如下:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="true" sslProtocol="TLS"
               keystoreFile="d:/cert/boors.keystore" keystorePass="password"
               truststoreFile="d:/cert/boors.keystore" truststorePass="password"
               />

 

应用程序的web.xml 可以加上这句话,也可以不用:

 

<!-- Authorization setting for SSL -->

<auth-method>CLIENT-CERT</auth-method>

<realm-name>Client Cert Users-only Area</realm-name>

</login-config>

 

<security-constraint>

<!-- Authorization setting for SSL -->

<web-resource-collection >

<web-resource-name >SSL</web-resource-name>

<url-pattern>/*</url-pattern>

</web-resource-collection>

<user-data-constraint>

<transport-guarantee>CONFIDENTIAL</transport-guarantee>

</user-data-constraint>

</security-constraint>

 

5. 导入客户端证书

 

如果设置了clientAuth="true" ,则需要强制验证客户端证书。双击 “d:\cert\boorc.p12” 即可将证书导入至 IE :

 

firefox没有导入证书如图:

  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 417 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    56 引用 • 85 回帖 • 1 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 544 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 567 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    93 引用 • 901 回帖
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 353 关注
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    182 引用 • 1010 回帖 • 2 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 441 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 233 回帖 • 1 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 98 关注
  • 音乐

    你听到信仰的声音了么?

    61 引用 • 512 回帖 • 2 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    245 引用 • 1338 回帖 • 2 关注
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 653 关注
  • 印象笔记
    3 引用 • 16 回帖 • 1 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 1 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 4 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    76 引用 • 258 回帖 • 635 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 683 关注
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    210 引用 • 2040 回帖
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 69 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 493 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖 • 1 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    286 引用 • 248 回帖 • 14 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 168 关注
  • 自由行