全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

利用keytools为tomcat 7配置ssl双向认证的方法

SSL简单介绍

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

1.怎样保障数据传输安全?

客户端和服务器端在进行握手(客户端和服务器建立连接和交换参数的过程称之为握手)时会产生一个“对话密钥”(session key),用来加密接下来的数据传输,解密时也是用的这个“对话密钥”,而这个“对话密钥”只有客户端和服务器端知道。也就是说只要这个“对话密钥”不被破解,就能保证安全。

 2. 客户端证书和服务器端证书

客户端证书和服务器端证书用于证明自己的身份,就好比每个人都有一张身份证,这种身份证是唯一的。一般来说,只要有服务器端的证书就可以了,但是有时需要客户端提供自己的证书,已证明其身份。

Keytool

Keytool 是一个Java数据证书的管理工具 ,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,包含两种数据:密钥实体(Key entity)-密钥(secret key)或者是私钥和配对公钥(采用非对称加密)可信任的证书实体(trusted certificate entries)-只包含公钥。下面就来看看利用keytools为tomcat 7配置ssl双向认证的详细过程吧。

第一、证书库、证书等生成

1、生成服务器证书库

keytool -validity 36500 -genkey -v -alias tomcat_server -keyalg RSA -keystore tomcat_server.keystore -dname "CN=127.0.0.1,OU=,O=,L=,ST=,c=" -storepass 123456 -keypass 123456
  • -validity 36500 有效期,以天为单位
  • CN 这项一定是服务器的域名或者IP地址
  • OU 组织单位
  • O 组织
  • L 区域
  • ST 州/省份
  • C 国家

2、客户端证书

keytool -validity 36500 -genkeypair -v -alias testclient -keyalg RSA -storetype PKCS12 -keystore testclient.p12 -dname "CN=testclient,OU=,O=,L=,ST=,c=" -storepass 123456

-storetype PKCS12 主要是为了将证书导入IE/firefox 中。

将生成的证书导入IE中。

3、将客户端证书导入服务器端证书库

服务器端证书不识别 p12格式的证书,需要从客户端证书导出 CER格式证书,然后将CER格式证书导入到服务器端证书中。

keytool -export -alias testclient -keystore testclient.p12 -storetype PKCS12 -storepass 123456 -rfc -file testclient.cer

然后将client.cer 导入到服务器证书库(使用下面任意一个命令)

keytool -import -v -file testclient.cer -keystore tomcat_server.keystore -storepass 123456
keytool -import -alias testclient -v -file testclient.cer -keystore tomcat_server.keystore -storepass 123456

注意:这里的别名,如果不加别名,则默认别名则是 mykey,所以见到mykey 请不要吃惊。

4、从服务器证书库导出服务器证书

keytool -export -alias tomcat_server -keystore tomcat_server.keystore -storepass 123456 -rfc -file tomcat_server.cer

该证书可以导入浏览器中,让客户端信任服务器证书。不导入也不影响使用,但浏览器会不信任服务器证书,会提示错误信息。

5、查看证书库中的所有证书

keytool -list -keystore tomcat_server.keystore -storepass 123456

第二、Tomcat 配置

配置 server.xml

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
 maxThreads="150" scheme="https" secure="true"
 keystoreFile="D:\\dev\\tomcat-https\\note\\tomcat_server.keystore" 
 keystorePass="123456" 
 truststoreFile="D:\\dev\\tomcat-https\\note\\tomcat_server.keystore" 
 truststorePass="123456"
 clientAuth="true" sslProtocol="TLS" />

启动tomcat 就可以了。

问题

如果启动时报如下错误:

SEVERE: Failed to initialize end point associated with ProtocolHandler ["http-apr-8443"]
java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR
 at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:507)
 at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:610)
 at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:429)
 at org.apache.catalina.connector.Connector.initInternal(Connector.java:981)
 at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
 at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)
 at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
 at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:814)
 at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
 at org.apache.catalina.startup.Catalina.load(Catalina.java:640)
 at org.apache.catalina.startup.Catalina.load(Catalina.java:665)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:601)
 at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:455)

则是由于Tomcat中的SSL采用了 APR来实现的,关于SSL的实现,Tomcat提供了两种:JSSE和APR,如果安装了 APR,则优先选择APR作为实现。

APR的ssh配置需要通OpenSSH来进行配置。这在 server.xml 中有说明:

Define a SSL HTTP/1.1 Connector on port 8443
This connector uses the JSSE configuration, when using APR, the connector should be using the OpenSSL style configuration described in the APR documentation

那么避免采用 APR呢? 有两种方法,

1,将 protocol=”HTTP/1.1” 修改为 protocol=”org.apache.coyote.http11.Http11Protocol”

2,在windows 下,可以将 bin 目录下的 tcnative-1.dll 删掉。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。


# tomcat  # ssl  # 双向认证  # tomcat双向ssl  # tomcat7  # Java如何跳过https的ssl证书验证详解  # 纯Java实现数字证书生成签名的简单实例  # 使用httpclient无需证书调用https的示例(java调用https)  # java结合keytool如何实现非对称加密与解密详解  # java结合keytool如何实现非对称签名和验证详解  # jdk中密钥和证书管理工具keytool常用命令详解  # JDK keytool证书工具功能代码解析  # 客户端  # 自己的  # 则是  # 两种  # 就可以  # 是一个  # 导入到  # 也不  # 公钥  # 就能  # 中有  # 采用了  # 或者是  # 请不要  # 这篇文章  # 这在  # 就来  # 不被  # 有两种  # 不加 


相关文章: 平台云上自主建站:模板化设计与智能工具打造高效网站  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  制作旅游网站html,怎样注册旅游网站?  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  电脑免费海报制作网站推荐,招聘海报哪个网站多?  IOS倒计时设置UIButton标题title的抖动问题  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  广德云建站网站建设方案与建站流程优化指南  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  香港服务器部署网站为何提示未备案?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  如何挑选高效建站主机与优质域名?  制作公司内部网站有哪些,内网如何建网站?  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  如何选择PHP开源工具快速搭建网站?  学校为何禁止电信移动建设网站?  手机网站制作与建设方案,手机网站如何建设?  建站之星展会模版如何一键下载生成?  济南专业网站制作公司,济南信息工程学校怎么样?  西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?  自助网站制作软件,个人如何自助建网站?  Thinkphp 中 distinct 的用法解析  如何通过虚拟主机快速完成网站搭建?  建站之星如何助力网站排名飙升?揭秘高效技巧  企业微网站怎么做,公司网站和公众号有什么区别?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  零服务器AI建站解决方案:快速部署与云端平台低成本实践  网站设计制作企业有哪些,抖音官网主页怎么设置?  建站OpenVZ教程与优化策略:配置指南与性能提升  建站VPS选购需注意哪些关键参数?  名字制作网站免费,所有小说网站的名字?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  如何高效配置香港服务器实现快速建站?  如何在阿里云完成域名注册与建站?  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  如何用景安虚拟主机手机版绑定域名建站?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  如何在Golang中指定模块版本_使用go.mod控制版本号  济南网站制作的价格,历城一职专官方网站?  如何撰写建站申请书?关键要点有哪些?  ,巨量百应是干嘛的?  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  建站之星好吗?新手能否轻松上手建站?  如何选择可靠的免备案建站服务器? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。