在完成配置客户端证书认证后,浏览器以https访问服务器的时候,会提示选择证书,之后,服务器端会验证证书。也就意味着只有拥有有效证书的客户端才能打开该网站。

以下是具体的配置过程。

1. 在服务器端生成相关证书

(1) 生成服务器证书容器。

/usr/java/jdk1..0_43/bin/keytool -validity  -genkey -v -alias server_test -keyalg RSA -keystore server.keystore -dname "CN=105.12.201.31,OU=test,O=test,L=shanghai,ST=shanghai,c=cn" -storepass test001 -keypass test001

其中,

validity 指定了有效期多少天,

dname 设定了签名中包含的一些信息,其中注意,据说CN指定的ip地址需和访问的ip一致(未测试过不相同的时候是否就会拒绝)。

keyalg 指定签名的算法,RSA或者DSA

storepass和keypass分别指定容器存储密码和读取密码。设置成相同的密码,因为tomcat里只有一个密码的设置。

(2) 生成信赖的客户端证书容器

/usr/java/jdk1..0_43/bin/keytool -validity  -genkey -v -alias server_test_trust -keyalg RSA -keystore server_trust.keystore -dname "CN=105.12.201.31,OU=test,O=test,L=shanghai,ST=shanghai,c=cn" -storepass test002 -keypass test002

(3) 生成客户端用秘钥对

/usr/java/jdk1..0_43/bin/keytool -validity  -genkeypair -v -alias client_1 -keyalg RSA -storetype PKCS12 -keystore client_1.p12 -dname "CN=client_1,OU=test,O=test,L=shanghai,ST=shanghai,c=cn" -storepass test003 -keypass test003

导出客户端用证书

/usr/java/jdk1..0_43/bin/keytool -export -v -alias client_1 -keystore client_1.p12 -storetype PKCS12 -storepass test003 -rfc -file client_1.cer

(4) 将客户端用的证书导入至服务端信赖的客户端的证书容器

/usr/java/jdk1..0_43/bin/keytool -import -v -alias client_1 -file client_1.cer -keystore server_trust.keystore -storepass test002

2. 修改tomcat的配置文件 conf/server.xml

找到原先的https的配置部分,默认是处于注释状态,将它放开

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
/>

修改为:

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile="${catalina.base}/keystore/server.keystore" keystorePass="test001"
truststoreFile="${catalina.base}/keystore/server_trust.keystore" truststorePass="test002"
/>

3. web app中设置强制SSL访问

  WEB-INF/web.xml中

    <!-- 强制SSL,即http请求自动跳转成https -->
<security-constraint>
<web-resource-collection>
<web-resource-name>SSL</web-resource-name>
<url-pattern>/*</url-pattern><!-- 全站使用SSL -->
</web-resource-collection>
<user-data-constraint>
<description>SSL required</description>
<!-- CONFIDENTIAL: 确保传输数据不被修改,不能被查看 -->
<!-- INTEGRAL: 确保传输数据不被修改 -->
<!-- NONE: 不做特殊限制-->
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>

4. 客户端PC导入上面生成的 client_test.cer 以及 client_test.p12 后,重启浏览器,即可访问

  初次访问会弹出选择证书的对话框,选中导入的cer证书即可。

tomcat 配置客户端证书认证的更多相关文章

  1. Tomcat 配置 HTTPS双向认证

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

  2. tomcat 配置域名证书

    tomcat 配置域名证书 示例: <!--" protocol="HTTP/1.1" connectionTimeout=" redirectPort= ...

  3. tomcat配置SSL双向认证

    一.SSL简单介绍 SSL(Secure Sockets Layer 安全套接层)就是一种协议(规范),用于保障客户端和服务器端通信的安全,以免通信时传输的信息被窃取或者修改. 怎样保障数据传输安全? ...

  4. tomcat 配置https (单向认证)

    1.单向认证,就是传输的数据加密过了,但是不会校验客户端的来源 2.双向认证,如果客户端浏览器没有导入客户端证书,是访问不了web系统的,找不到地址 如果只是加密,单向就行 如果想要用系统的人没有证书 ...

  5. Tomcat配置SSL证书(PFX证书)

    公司项目,应该是阿里云服务器 在windows2008 R2搭建的 Tomcat部署SSL证书,本文以PFX证书为例. 配置好之后开始 一.什么是SSL(证书)? SSL证书服务(Alibaba Cl ...

  6. tomcat配置SSL证书(使用startSSL申请到的证书)

    1. 生成p12证书 生成完成后,下载保存. 2. 将p12文件上传至服务器上的tomcat/keystore/上,此处取名为test.com.p12 3. 修改tomcat/conf/server. ...

  7. tomcat配置ssl证书

    1.server.xml  打开已经注释掉的代码 然后添加证书地址 <Connector SSLEnabled="true" clientAuth="want&qu ...

  8. tomcat配置SLL证书

    1.将jks证书复制到conf目录下 2.解除注释:88行至96行 修改代码 <Connector port="443" protocol="org.apache. ...

  9. tomcat 配置https证书 ssl

    修改tomcat-conf-server.xml,原配置文件是 <Connector connectionTimeout="20000" port="8080&qu ...

随机推荐

  1. Spark java.lang.outofmemoryerror gc overhead limit exceeded 与 spark OOM:java heap space 解决方法

    引用自:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380146d96864968d4e414c42246 ...

  2. sublime text3配置node.js开发环境

    今天配置sublime下node.js网上搜索很多方法. 首先:传统的方法是 1.GIT方法 可直接输入 Git clone https://github.com/tanepiper/SublimeT ...

  3. QT socket相关

    #include<QtNetwork/QTcpSocket>#include<QtNetwork/QTcpServer> 1.服务器端 void About::init_tcp ...

  4. Android JavaMail

    一.简介 JavaMail API提供了一种与平台无关和协议独立的框架来构建邮件和消息应用程序. JavaMail API提供了一组抽象类定义构成一个邮件系统的对象.它是阅读,撰写和发送电子信息的可选 ...

  5. scp使用

    从82服务器复制文件 scp -P 50028 -r root@***.**.**.82:/data/upload.tar / -P:指定非ftp22端口

  6. 日志管理-Log4net

    引言 log4net库是Apache log4j框架在Micorsoft.NET平台的实现,是一个帮组程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具.(百度百科) 实际项目中使用log ...

  7. nvm诡异的报错

    安装:curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash wget -qO- htt ...

  8. 初始Python

    一.Python简介 1.Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新 ...

  9. GMap.NET二次开发库

    GMap.NET的出现,解决了传统的依赖于地图引擎的代价高昂的解决方案,而且使用传统地图引擎,无法迁移,就连我们的地图放大缩小这样常规的方法,都是紧紧绑定在这些令人恶心的地图引擎开发包提供的SDK接口 ...

  10. OpenERP 使用与开发笔记(一)

    一直关注OpenERP,但一直未真正使用.最近一些数据想规范管理,免得使和EXCEL与WORD等到处找,所以想到OpenERP的自定义功能比较好,就再次找来相关资料重新拾掇起来.在这过程中,发现了许多 ...