转自:http://tomhat.iteye.com/blog/2087673

一、Keytool介绍

Keytool是一个Java数据证书的管理工具。Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,包含两种数据:

1.   密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密)

2.   可信任的证书实体(trusted certificate entries)——只包含公钥

Alias(别名):每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写

keystore的存储位置

在没有制定生成位置的情况下,keystore会存在与用户的系统默认目录, 如:对于window xp系统,会生成在系统的C:/Documents and Settings/UserName/ 文件名为“.keystore”

keystore的生成:keytool -genkey -alias tomcat -keyalg RSA   -keystore d:/mykeystore -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass changeit -storepass -validity 36500

参数说明:

-genkey表示要创建一个新的密钥 
-dname表示密钥的Distinguished Names, 
CN=commonName 
OU=organizationUnit 
O=organizationName 
L=localityName 
S=stateName 
C=country 
Distinguished Names表明了密钥的发行者身份 
-keyalg使用加密的算法,这里是RSA 
-alias密钥的别名 
-keypass私有密钥的密码,这里设置为changeit 
-keystore 密钥保存在D:盘目录下的mykeystore文件中 
-storepass 存取密码,这里设置为changeit,这个密码提供系统从mykeystore文件中将信息取出 
-validity该密钥的有效期为 36500表示100年 (默认为90天)

cacerts证书文件(The cacerts Certificates File)

改证书文件存在于java.home/lib/security目录下,是Java系统的CA证书仓库

二、准备工作

1.   验证是否已创建过同名的证书

Window : keytool -list -v -alias tomcat -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit

Linux : keytool -list -v -alias tomcat -keystore "$JAVA_HOME/jre/lib/security/cacerts" -storepass changeit

2.   删除已创建的证书

Window : keytool -delete -alias tomcat -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit

Linux : keytool -delete -alias tomcat -keystore "$JAVA_HOME/jre/lib/security/cacerts" -storepass changeit

三、创建证书

1.   服务器中生成证书:

(注:生成证书时,CN要和服务器的域名相同,如果在本地测试,则使用localhost)

Window : keytool -genkey -alias tomcat -keyalg RSA -keystore d:/my.keystore -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass changeit -storepass changeit

Linux : keytool -genkey -alias tomcat -keyalg RSA -keystore ~/my.keystore -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass changeit -storepass changeit

2.   导出证书,由客户端安装:

window : keytool -export -alias tomcat -keystore d:/my.keystore -file d:/mycerts.cer -storepass changeit

Linux : keytool -export -alias tomcat -keystore ~/my.keystore -file ~/mycerts.cer -storepass changeit

3.   客户端配置:为客户端的JVM导入密钥(将服务器下发的证书导入到JVM中)

window : keytool -import -trustcacerts -alias tomcat -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -file d:/mycerts.cer -storepass changeit

Linux : keytool -import -trustcacerts -alias tomcat -keystore "$JAVA_HOME/jre/lib/security/cacerts" -file ~/mycerts.cer -storepass changeit

四、配置Tomcat SSL

修改server.xml中的SSL服务 
Window : 
<Connector port="8443" maxHttpHeaderSize="8192" 
     maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
     enableLookups="false" disableUploadTimeout="true" 
     acceptCount="100" scheme="https" secure="true" 
     clientAuth="false" sslProtocol="TLS" keystoreFile="d:/my.keystore" keystorePass="changeit"/>

Linux: 
<Connector port="8443" maxHttpHeaderSize="8192" 
     maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
     enableLookups="false" disableUploadTimeout="true" 
     acceptCount="100" scheme="https" secure="true" 
     clientAuth="false" sslProtocol="TLS" keystoreFile="~/my.keystore" keystorePass="changeit"/>

五、常见问题

1.   未找到可信任的证书

主要原因为在客户端未将服务器下发的证书导入到JVM中,可以用

keytool -list -alias tomcat -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit

来查看证书是否真的导入到JVM中。

2.   keytool错误:java.io.IOException:keystore was tampered with,or password was incorrect

原因是在你的home目录下是否还有.keystore存在。如果存在那么把他删除掉,后再执行

或者删除"%JAVA_HOME%/jre/lib/security/cacerts 再执行

建议直接删掉cacerts再导入

Tomcat配置https及访问http自动跳转至https 
完成上述操作就可以通过https://www.xxx.com:8443 或者 http://www.xxx.com:[port]访问网站; 
第二步:配置Tomcat 
  打开$CATALINA_HOME/conf/server.xml,修改如下:

  <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 
修改参数=> 
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000"  redirectPort="443" />

<!-- 
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" 
              maxThreads="150" scheme="https" secure="true" 
              clientAuth="false" sslProtocol="TLS"/> 
--> 
去掉注释且修改参数=> 
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" 
               maxThreads="150" scheme="https" secure="true" 
               clientAuth="false" sslProtocol="TLS" keystoreFile="/etc/tomcat.keystore" keystorePass="changeit"/>

<!-- 
   <Connector port="8009" enableLookups="false" protocol="AJP/1.3" redirectPort="8443" /> 
--> 
修改参数=> 
<Connector port="8009" enableLookups="false" protocol="AJP/1.3" redirectPort="443" />

第三步:配置tomcat的web.xml在该文件末尾增加:强制https访问 
及输入http:// 自动跳转https:// 
配置如下: 
<login-config> 
     <!-- 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>

keytool生成证书与Tomcat SSL配置的更多相关文章

  1. Tomcat SSL配置及Tomcat CA证书安装

    Tomcat既可以作为独立的Servlet容器,也可以作为其他HTTP服务器附加的Servlet容器.如果Tomcat在非独立模式下工作, 通常不必配置SSL,由它从属的HTTP服务器来实现和客户的S ...

  2. tomcat7+jdk的keytool生成证书 配置https

    目前只会使用jdk的keytool来生成证书.本文仅介绍这种方法. 1Windows下: 1.1 生成keystore文件及导出证书 打开控制台: 运行: %JAVA_HOME%\bin\keytoo ...

  3. Tomcat服务器配置https双向认证(使用keytool生成证书)

    一,HTTPS原理   1,HTTP.HTTPS.SSL.TLS介绍与相互关系 (1)HTTP:平时浏览网页时候使用的一种协议.HTTP协议传输的数据都是未加密的(明文),因此使用HTTP协议传输隐私 ...

  4. Tomcat服务器配置https认证(使用keytool生成证书)

    一.证书生成 1.生成服务器证书 (1)打开打开命令控制台,进入jdk的bin目录 cd D:\Program Files\jdk1.6.0_45\bin (2)keytool为Tomcat生成证书( ...

  5. SSL 通信原理及Tomcat SSL 配置

    SSL 通信原理及Tomcat SSL 双向配置 目录1 参考资料 .................................................................. ...

  6. CentOS 6.5 nginx+tomcat+ssl配置

    本文档用于指导在CentOS 6.5下使用nginx反向代理tomcat,并在nginx端支持ssl. 安装nginx.参见CentOS 6 nginx安装. SSL证书申请.参见腾讯SSL证书申请和 ...

  7. spring-boot+nginx+tomcat+ssl配置笔记

    如果你的tomcat应用需要采用ssl来加强安全性,一种做法是把tomcat配置为支持ssl,另一种做法是用nginx反向代理tomcat,然后把nginx配置为https访问,并且nginx与tom ...

  8. Keytool生成证书

    一.生成证书keytool -genkey -alias 别名 -keyalg RSA -keysize 1024(密钥位数) -keypass 密码 -validity 365(默认90天) -ke ...

  9. Tomcat SSL配置 Connector attribute SSLCertificateFile must be defined when using SSL with APR解决

    原文地址:http://blog.csdn.net/kissliux/article/details/17392003 Tomcat 6版本配置SSL过程有两步: 1.用JDK自带的keytool.e ...

随机推荐

  1. XSS Filter Evasion Cheat Sheet 中文版

    前言 译者注: 翻译本文的最初原因是当我自己看到这篇文章后,觉得它是非常有价值.但是这么著名的一个备忘录却一直没有人把它翻译成中文版.很多人仅仅是简单的把文中的 各种代码复制下来,然后看起来很刁的发在 ...

  2. FreeMarker template error!

    部署项目后发现以下“FreeMarker template error!”的问题,google.baidu猛一顿搜索无果后开始认真分析异常信息. FreeMarker template error! ...

  3. 新浪微博客户端(14)-截取回调地址中的授权成功的请求标记,换取access_token

    DJOAuthViewController.m #import "DJOAuthViewController.h" #import "AFNetworking.h&quo ...

  4. Serenity框架官方文档翻译(1-2开始、安装和界面)

    1.开始 最好的和最快速地上手Serenity的方法是使用SERENE,它是一个示例应用程序模板. 您有2个选项来安装SERENE 模板到您的Visual Studio: 从Visual Studio ...

  5. MongoDB.WebIDE:升级版的Mongodb管理工具

    很早以前收藏了一片文章:<强大的MongoDB数据库管理工具>.最近刚好要做一些MongoDB方面的工作,于是翻出来温习了一下,用起来也确实挺方便.不过在使用过程中出现了一些个问题,加上更 ...

  6. SQL Server2008ldf文件太大

    --适用于SQL Server 2008的方法 USE [master] GO ALTER DATABASE RmyyHisDW SET RECOVERY SIMPLE WITH NO_WAIT GO ...

  7. Linux upstart启动方式详解

     Ubuntu从6.10开始逐步用Upstart()代替原来的SysVinit进行服务进程的管理.RHEL(CentOS)也都从版本6开始转用Upstart代替以往的init.d/rcX.d的线性启动 ...

  8. c# 继承,多态,new /overrid 区别, 引用父类的方法

    好久没碰c#了,偶尔需要制作点小工具.为了一个灵活的架构设计,需要对继承/多态有比较深刻的理解. 不料忘得差不多了,好吧,再来回忆下.直接上代码了,如下: using System; using Sy ...

  9. Java--读写文件综合

    package javatest; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream ...

  10. DOS命令符基本操作

    怎么改变DOS默认路径 开始->所有程序->附件->命令提示符,在“命令提示符”上右键,选择“属性”,(或者在快捷方式上点击属性)会弹出一个“命令提示符 属性”对话框,可以通过修改该 ...