`

HTTPS tomcat配置与相关加密算法概论

 
阅读更多

 

HTTPS = SSL + HTTP

1.首先用jdk自带的工具keytool生成一个"服务器证书"

进入你的cmd命令行,在jdk安装目录bin目录下(如果没有配置环境变量的话)(JAVA_HOME/bin/) 敲入一下东东:

keytool -genkey -alias tomcat -keyalg RSA -keystore C:\tomcat.key
提示输入密码,使用Tomcat的默认值changeit //这里,你也可以定义自己的密码
输入相关信息后确认
将生成PCKS1.2格式的数字证书于C:\tomcat.key

 

 

===============ps:什么是数字证书、RSA是什么加密算法等============

1.0 你见过的DES,这个是什么:就是一个数据加密标准(首先由美国政府在1977年采用它对数据进行加密——理解为一个加密算法)

1.1 什么RSA——它是一种算法,也是一个公司的名称。见http://baike.baidu.com/view/696428.htm

1.2 什么是非对称加密和对称加密:非对称密钥加密就是加密和解密的密钥是不一样,对称密钥加密就是加密和解密的密钥是一样的

1.3 为什么要引进密钥这个概念,而不直接使用密码了?

      可以这么理解:由于密码技术本身是公开的,技术都公布比较准化了,对每一个人都是可以用的,如果每个人都知道数据编码的方法。入侵者可以从网络上爬下数据包然后使用各种公开的解密算法进行解密,很快就可以破解了。。所以需要一些秘密信息来阻止他们解密——密钥就这么产生了(密钥他们不知道)

1.4 非对称加密密钥(公开密钥)以及对称加密密钥

其实他是两个密钥,比如我要加密,我就使用RSA(非对称加密算法)生成一对密钥<K,D>,两个密钥不相同,一个密钥用来加密用,一个密钥用来解密用。。那个加密的被称为公共密钥,发给接收方,告诉接收方,你如果有数据发给我,请用我这个公共密钥进行加密后再传给我,发过来的数据,我使用那个解密的密钥(私钥)来解密了。(我们发现公共密钥是公开的,并在网络上传输给对方,即使被黑客下载了,也无法解密啊,因为解密密钥没有在网络上传输的)

过程如:http://baike.baidu.com/view/444169.htm

假设两个用户A,B进行通信,A先发送信息给B,然后B发送信息给A

  1. B先产生一对密钥k1a和k1b,前者用来加密,后者用来解密

  2. B把密钥k1a发送给A;(因为k1a只能用来加密,截获方无法通过它来解密并读取密文)

  3. A用密钥k1a加密一条信息,使之变成密文c1;

  4. A把密文c1发送给B;

  5. B用密钥k1b解密,并读取解密后的信息;

  6. A产生一对密钥k2a和k2b,前者用来加密,后者用来解密

  7. A把密钥k2a发送给B;

  8. B用密钥k2a加密一条信息,使之变成密文c2;

  9. B把密文c2发送给A;


  10. A用密钥k2b解密,并读取解密后的信息;

同理对称的,加密也解密的密钥都是相同的拉

  对称密钥加密的过程是:

  假设两个用户A,B进行通信,A先发送信息给B,然后B发送信息给A

  1. A先用密钥k1加密一条信息,使之变成密文c1;

  2. A把密钥k1发送给B;(此时如果密钥被截获,截获方就可以解密并读取密文)

  3. A把密文c1发送给B;

  4. B用密钥k1解密,并读取解密后的信息

  5. B用密钥k2加密一条信息,使之变成密文c2;

  6. B把密钥k2发送给A;

  7. B把密文c2发送给A;


  8. A用密钥k2解密,并读取解密后的信息

1.5 什么是不可逆算法,他为什么不需要密钥了?

不可逆算法,就是说即使告诉你加密技术,你也没有办法解密。没办法还原的,就这个意思。。既然他没有办法还原,如果黑客偷到了他,即使知道加密技术,也没办法还原,那还需要密钥干嘛了?所以 嘎嘎,就不需要密钥了。。不过我国的王教授还是牛逼的把md5给。。。。那个了。


1.6、什么是数字证书

由权威机构CA中心签发的证书,很多购物网站都有注册这个证书了,当你访问这些网站时候,浏览器可以检查证书判断的出来你这个证书是不是权威CA签发的的,然后给出提示相应提示,这样用户就不会上错到钓鱼网了。。。什么是钓鱼网?很多网站跟别人做一模一样的,然后你以为是真的,输入用户名和密码,,这下完蛋了,你的数据就传送到钓鱼网那些b手上了。。

数字证书是一种公开密钥加密(非对称加密算法)。


1.7、https其实就是让用户提交数据的时候,浏览器使用http应用程序封装成http数据,然后通过SSL对数据进行加密,然后交给系统tcp协议层程序进行封装等,再到网络层,数据链路层,物理层。。。最后发送到网站服务器上面。

而一般的http协议的,浏览器使用http应用程序封装成http协议规定格式数据(都是明文的啊,密码,用户名都是可以看到的),如果黑客在监听你的电脑,爬下你的数据,就可以看到密码和用户名了,所以比较危险的。。咳,用户登录页面最好使用https来弄

===================ps结束=纯属看书后个人理解,不一定正确=======================

 

2、我的tomcat是6.0.24版本打开你的server.xml添加一下内容

 

 

<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"  
           port="8443" minSpareThreads="5" maxSpareThreads="75"  
           enableLookups="true" disableUploadTimeout="true"    
           acceptCount="100"  maxThreads="200"  
           scheme="https" secure="true" SSLEnabled="true"  
           clientAuth="false" sslProtocol="TLS"  
           keystoreFile="C:/tomcat.key"    
           keystorePass="changeit"/> 
 

 

3、然后打开你的https://127.0.0.1:8443/项目名    就可以访问了,你可以发现浏览器地址栏开头有一个红色叉叉,嘎嘎,因为这个数字认证不被浏览器认为是权威的。。

4、此时你可以使用http://127.0.0.1:8080/项目名称来访问,像淘宝登录页面那样,他支持两种协议进行登录。但是你如果强制要求http协议转成https来访问可以使用以下配置。。。在项目的web.xml里面:

 

//在欢迎配置下面添加如下  
<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> 
 

5、如果你已经申请了CA证书

 

查看一下内容转自http://sanlin0523.blog.sohu.com/25942986.html

 

作者:yellowtop Email: yellowtop@163.com 日期:2004-11-26 

以Verisign 测试证书为例 

1.创建一个本地证书: 

C:\j2sdk1.4.2_05\bin>;keytool -genkey -alias tomcat -keyalg RSA -keystore keystore 
输入keystore密码:  12345678 
您的名字与姓氏是什么? 
  [Unknown]:  www.test.com 
您的组织单位名称是什么? 
  [Unknown]:  system 
您的组织名称是什么? 
  [Unknown]:  test 
您所在的城市或区域名称是什么? 
  [Unknown]:  beijing 
您所在的州或省份名称是什么? 
  [Unknown]:  beijing 
该单位的两字母国家代码是什么 
  [Unknown]:  cn 
CN=liujx, OU=system, O=test, L=beijing, ST=beijing, C=cn 正确吗? 
  [否]:  y 

输入<tomcat>;的主密码 
        (如果和 keystore 密码相同,按回车): 

查看证书 
C:\j2sdk1.4.2_05\bin>;keytool -list -keystore keystore 
输入keystore密码:  12345678 

Keystore 类型: jks 
Keystore 提供者: SUN 

您的 keystore 包含 1 输入 

tomcat, 2004-11-26, keyEntry, 
认证指纹 (MD5): B8:44:A1:A2:C7:9A:09:EE:A0:CF:5B:AA:DC:F7:0F:80 


2.然后创建CSR: 

C:\j2sdk1.4.2_05\bin>;keytool -certreq -keyalg RSA -alias tomcat -file certreq.csr -keystore keystore 

输入keystore密码:  12345678 

现在,你有了一个叫certreq.csr的文件,你可以将它提交到CA(参考CA网站上的文档怎样做)。然后就得到了证书。 
例如:我们申请了个Verisign.com的测试证书保存为:client.cer 

3.从你获得证书的CA下载Chain Certificate: 

例如: 
Verisign.com正式证书:去http://www.verisign.com/support/install/intermediate.html 
Verisign Test CA Root证书:去http://www.verisign.com/server2/trial/faq/index.html 


4.将Chain Certificate导入到keystore: 

例如:导入Verisign Test CA Root证书getcacert.cer 
C:\j2sdk1.4.2_05\bin>;keytool -import -trustcacerts -alias root -file getcacert.cer -keystore keystore 
输入keystore密码:  12345678 
Owner: OU=For VeriSign authorized testing only. No assurances (C)VS1997, OU=www.verisign.com/repository/TestCPS Incorp. By Ref. Liab. LTD., O="VeriSign, Inc"
发照者: OU=For VeriSign authorized testing only. No assurances (C)VS1997, OU=www.verisign.com/repository/TestCPS Incorp. By Ref. Liab. LTD., O="VeriSign, Inc"
序号: 52a9f424da674c9daf4f537852abef6e 
有效期间: Sun Jun 07 08:00:00 CST 1998 至: Wed Jun 07 07:59:59 CST 2006 
认证指纹: 
         MD5:  40:06:53:11:FD:B3:3E:88:0A:6F:7D:D1:4E:22:91:87 
         SHA1: 93:71:C9:EE:57:09:92:5D:0A:8E:FA:02:0B:E2:F5:E6:98:6C:60:DE 
信任这个认证? [否]:  y 
认证已添加至keystore中 

查看证书 
C:\j2sdk1.4.2_05\bin>;keytool -list -keystore keystore 
输入keystore密码:  12345678 

Keystore 类型: jks 
Keystore 提供者: SUN 

您的 keystore 包含 2 输入 

root, 2004-11-26, trustedCertEntry, 
认证指纹 (MD5): 40:06:53:11:FD:B3:3E:88:0A:6F:7D:D1:4E:22:91:87 
tomcat, 2004-11-26, keyEntry, 
认证指纹 (MD5): B8:44:A1:A2:C7:9A:09:EE:A0:CF:5B:AA:DC:F7:0F:80 



5.最后,导入你的新证书:  

C:\j2sdk1.4.2_05\bin>;keytool -import -trustcacerts -alias tomcat -file client.crt -keystore keystore 
.old 
输入keystore密码:  12345678 
认证回复已安装在 keystore中 

查看证书 
C:\j2sdk1.4.2_05\bin>;keytool -list -keystore keystore 
输入keystore密码:  12345678 

Keystore 类型: jks 
Keystore 提供者: SUN 

您的 keystore 包含 2 输入 

root, 2004-11-26, trustedCertEntry, 
认证指纹 (MD5): 40:06:53:11:FD:B3:3E:88:0A:6F:7D:D1:4E:22:91:87 
tomcat, 2004-11-26, keyEntry, 
认证指纹 (MD5): 68:33:EE:6C:5C:5B:70:B5:0D:85:3B:6D:AF:00:91:24 

注意:仔细观察tomcat项的认证指纹与导入之前是不同的。 

6.安装证书 

把最后生成的keystore文件,复制到tomcat安装路径的conf目录下 


7.修改Tomcat的配置文件server.xml 

    <!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->; 
    <Connector port="8443"  
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
               enableLookups="false" disableUploadTimeout="true" 
               acceptCount="100" debug="0" scheme="https" secure="true" 
               clientAuth="false" sslProtocol="TLS"  
               keystoreFile="/conf/keystore" keystorePass="12345678"/>; 

8.重新启动Tomcat 

9.为IE浏览器安装测试根证书: 

双击getcacert.cer,安装测试根证书 

10.测试SSL 

打开IE输入https://www.test.com:8443/ 
 

待续~

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics