【转】 完美配置Tomcat的HTTPS
Tomcat配置HTTPS的文章到处都有,过程也比较简单,随后文中会转一段过来。
但对于启用APR情况下报异常“java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR”的解决方法上处理的都比较偷懒,通常都是把APR注释掉不启用APR。
做为一个文艺青年兼软件开发工程师(偶吐),我有责任深入学习仔细研究完美解决这个问题(偶再吐)。
资料转载【TOMCAT配置HTTPS】
################################################################
二、创建证书
啰 嗦几句:证书是单点登录认证系统中很重要的一把钥匙,客户端于服务器的交互安全靠的就是证书;本教程由于是演示所以就自己用JDK自带的keytool工 具生成证书;如果以后真正在产品环境中使用肯定要去证书提供商去购买,证书认证一般都是由VeriSign认证,中文官方网站:http://www.verisign.com/cn/
用JDK自带的keytool工具生成证书:
keytool -genkey -alias wsria -keyalg RSA -keystore d:/keys/wsriakey
无图不给力,有图有真相:

具体的输入项图片中都有说明,有一点我要解释一下;在输入完密码后提示输入域名是我输入的是sso.wsria.com,其实这个域名是不存在的,但是我为了演示所以虚拟了这个域名,技巧在于修改
C:\Windows\System32\drivers\etc\hosts
添加内容如下:
127.0.0.1 sso.wsria.com
这样在访问sso.wsria.com的时候其实是访问的127.0.0.1也就是本机
严重提醒:提示输入域名的时候不能输入IP地址
三、导出证书
D:\keys>keytool -export -file d:/keys/wsria.crt -alias wsria -keystore d:/keys/wsriakey
特别提示:如果提示:
keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect
那么请输入密码:changeit
来点颜色:

至此导出证书完成,可以分发给应用的JDK使用了,接下来讲解客户端的JVM怎么导入证书。
四、为客户端的JVM导入证书
keytool -import -keystore D:\tools\jdk\1.6\jdk1.6.0_20\jre\lib\security\cacerts -file D:/keys/wsria.crt -alias wsria
来点颜色瞧瞧:

特别说明
D:\tools\jdk\1.6\jdk1.6.0_20\jre\lib\security -- 是jre的目录;密码还是刚刚输入的密码。至此证书的创建、导出、导入到客户端JVM都已完成,下面开始使用证书到Web服务器中,本教程使用tomcat。
五、应用证书到Web服务器-Tomcat
说 是应用起始做的事情就是启用Web服务器(Tomcat)的SSL,也就是HTTPS加密协议,为什么加密我就不用啰嗦了吧…… 准备好一个干净的tomcat,本教程使用的apache-tomcat-6.0.29 打开tomcat目录的conf/server.xml文件,开启83和87行的注释代码,并设置keystoreFile、keystorePass修 改结果如下:
|
1
2
|
<connector port="8443" protocol="HTTP/1.1" sslenabled="true" maxthreads="150"scheme="https" secure="true" clientauth="false" sslprotocol="TLS"keystorefile="D:/keys/wsriakey" keystorepass="wsria.com"></connector> |
参数说明:
- keystoreFile:在第一步创建的key存放位置
- keystorePass:创建证书时的密码
好了,到此Tomcat的SSL启用完成,现在你可以启动tomcat试一下了,例如本教程输入地址:https://sso.wsria.com:8443/ 打开的是:

好的,那么我们点击“继续浏览此网站(不推荐)。现在进入Tomcat目录了吧,如果是那么你又向成功迈进了一步。
################################################################
来自http://www.kafeitu.me/2010/11/05/sso-cas-full-course.html。
文章写的很好,也很细致。
嗯。好了,问题来了。
当我启动Tomcat时发现控制台报错如下:
- 2012-5-16 13:10:37 org.apache.catalina.core.AprLifecycleListener init
- 信息: Loaded APR based Apache Tomcat Native library 1.1.23.
- 2012-5-16 13:10:37 org.apache.catalina.core.AprLifecycleListener init
- 信息: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
- 2012-5-16 13:10:37 org.apache.coyote.AbstractProtocol init
- 信息: Initializing ProtocolHandler ["http-apr-8080"]
- 2012-5-16 13:10:37 org.apache.coyote.AbstractProtocol init
- 信息: Initializing ProtocolHandler ["http-apr-8443"]
- 2012-5-16 13:10:37 org.apache.coyote.AbstractProtocol init
- 严重: Failed to initialize end point associated with ProtocolHandler ["http-apr-8443"]
- java.lang.Exception: <span style="background-color: #ffff00;">Connector attribute SSLCertificateFile must be defined when using SSL with APR</span>
- at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:484)
- at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:566)
- at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:417)
- at org.apache.catalina.connector.Connector.initInternal(Connector.java:956)
- at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
- at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)
直接Google,很多答案都是不启用APR,修改conf/server.xml注释掉下面一段
- <!--APR library loader. Documentation at /docs/apr.html -->
- <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
例如:http://tdp100.iteye.com/code?tag=tomcat+https
但这样做将失去APR库的价值,Tomcat性能必然下降(APR库作用见此处http://wenson.iteye.com/blog/382738)
让我们打开Tomcat的文档webapps/docs/apr.html,其中讲到
<Connector port="443" maxHttpHeaderSize="8192"
maxThreads="150"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
SSLEnabled="true"
SSLCertificateFile="${catalina.base}/conf/localhost.crt"
SSLCertificateKeyFile="${catalina.base}/conf/localhost.key" />
SSLCertificateFile属性好理解,是指证书文件,就是用keytool导出的那个。
而SSLCertificateKeyFile应该是指私钥,这个东西从哪里来呢,继续找资料。
在这里:http://stackoverflow.com/questions/150167/how-do-i-list-export-private-keys-from-a-keystore
关键是这一段:
keytool -importkeystore -srckeystore keystore.jks \
-destkeystore intermediate.p12 -deststoretype PKCS12
Next, use OpenSSL to do the extraction to PEM:
openssl pkcs12 -in intermediate.p12 -out extracted.pem -nodes
先把keystore转换为pkcs12格式,然后使用openssl工具导出私钥即可。
openssl 工具可以从这里下载:http://gnuwin32.sourceforge.net/packages/openssl.htm
ohYeah! 搞定了。
【转】 完美配置Tomcat的HTTPS的更多相关文章
- 完美配置Tomcat的HTTPS
Tomcat配置HTTPS的文章到处都有,过程也比较简单,随后文中会转一段过来. 但对于启用APR情况下报异常“java.lang.Exception: Connector attribute SSL ...
- javaweb学习总结十八(软件密码学、配置tomcat的https连接器以及tomcat管理平台)
一:软件密码学 1:对称加密 对称加密是最快速.最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key).对称加密有很多种算法,由于它效 ...
- 配置Tomcat使用https协议(配置SSL协议)
配置Tomcat使用https协议(配置SSL协议) 2014-01-20 16:38 58915人阅读 评论(3) 收藏 举报 转载地址:http://ln-ydc.iteye.com/blog/1 ...
- 配置tomcat的https域名
配置tomcat的https域名: <Connector port=" protocol="org.apache.coyote.http11.Http11NioProtoco ...
- Keytool配置 Tomcat的HTTPS双向认证
Keytool配置 Tomcat的HTTPS双向认证 证书生成 keytool 简介 Keytool是一个Java数据证书的管理工具, Keytool将密钥(key)和证书(certificates) ...
- 配置Tomcat使用https协议
一. 创建tomcat证书 这里使用JDK自带的keytool工具来生成证书: 1. 在jdk的安装目录\bin\keytool.exe下打开keytool.exe 2. 在命令行中输入以下命令: ...
- 配置tomcat的https通信(单向认证)
1.首先用jdk带的工具生成证书库 打开cmd命令行窗口,cd 到tomcat安装目录的bin下面执行 keytool -v -genkey -alias tomcat -keyalg RSA -ke ...
- CentOs下,配置tomcat支持https
网上此类教程一大堆,本文主要记录步骤和几个注意点. 首先,我们使用jdk的keytool生成证书.命令如下: p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: ...
- 【转】配置Tomcat使用https协议(配置SSL协议)
转载地址:http://ln-ydc.iteye.com/blog/1330674 内容概览: 如果希望 Tomcat 支持 Https,主要的工作是配置 SSL 协议 1.生成安全证书 2.配置to ...
随机推荐
- 转载,find.sh
#!/bin/bash #find files contains a keyword #write by xiaojing.zhao #2012.12.14 echo -e "\nThis ...
- Linux下安装php开发框架yaf
yaf框架中文手册:http://yaf.laruence.com/manual/index.html yaf手册:http://www.php.net/manual/en/book.yaf.php ...
- Day02——widow对象
window - 计时器 1、setTimeout()可以用来在指定的时间之后单次调用函数. setTimeount(f,1000);//一秒后调用函数f clearTimeout();取消函数的执行 ...
- Trie/最短的名字
题目链接 /* 简单trie树的应用,注意在初始化的时候要把cnt也初始化,不然,WA! 下面的四分代码各有特点 */ //数组型,名字查询. #include<cstdio> #incl ...
- dump文件生成与调试(VS2008)
总结一下dump文件生成和调试的方法: 1:用SetUnhandledExceptionFilter捕获未处理的异常,包含头文件<windows.h>.函数原型为: LPTOP_LEVEL ...
- linux系统定时重启tomcat
#touch auto-start.sh [root@Linux opt]# echo $LANGen_US.UTF-8 #vim auto-start.sh #!/bin/sh export LAN ...
- CSS小例收藏
body { background-color: #e8dabf; background-image: url(img/bg.png), url(img/bg_tile.png); backgroun ...
- 简单实现contentOS下开机自动启动tomcat
看过网上很多写tomcat开机自启动的例子,很多都是写了一个比较复杂的脚步.找到一个比较简单的. 首先编辑 vi /etc/rc.d/rc.local 在尾部加入 export JDK_HOME=/u ...
- angularjs中动态为audio绑定src
今天在angularjs中用audio的时候碰到的这些问题,查阅http://www.cnblogs.com/rachelanlan/p/3598070.html获得解决,感谢! <div cl ...
- 修改document.domain的注意事项(转)
有时候,需要修改document.domain. 典型的情形:http://a.xxx.com/A.htm 的主页面有一个<iframe src="http://b.xxx.com/B ...