https增加临时证书,https配置与实现

有两种基本的加解密算法类型:
1)对称加密
:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;
2)非对称加密
:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。
https的通信过程:
https通信的优点:
1)客户端产生的密钥只有客户端和服务器端能得到;
2)加密的数据只有客户端和服务器端才能得到明文;
3)客户端到服务端的通信是安全的。
2.在项目中实现
1)tomcat的配置

SSL协议使用不对称加密技术实现会话双方之间信息的安全传递。可以实现信息传递的保密性、完整性,并且会话双方能鉴别对方身份。不同于常用的http协议,我们在与网站建立SSL安全连接时使用https协议,即采用的方式来访问。
当我们与一个网站建立https连接时,我们的浏览器与Web
Server之间要经过一个握手的过程来完成身份鉴定与密钥交换,从而建立安全连接。具体过程如下:
1.
用户浏览器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送到服务器。
2.
服务器将其SSL版本号、加密设置参数、与session有关的数据以及其它一些必要信息发送给浏览器,同时发给浏览器的还有服务器的证书。如果配置服务器的SSL需要验证用户身份,还要发出请求要求浏览器提供用户证书。
3.
客户端检查服务器证书,如果检查失败,提示不能建立SSL连接。如果成功,那么继续。

1Windows下:

放开原先注释的一段代码: 

  1. 客户端浏览器为本次会话生成pre-master
    secret,并将其用服务器公钥加密后发送给服务器。
    5.
    如果服务器要求鉴别客户身份,客户端还要再对另外一些数据签名后并将其与客户端证书一起发送给服务器。
    6.
    如果服务器要求鉴别客户身份,则检查签署客户证书的CA是否可信。如果不在信任列表中,结束本次会话。如果检查通过,服务器用自己的私钥解密收到的pre-master
    secret,并用它通过某些算法生成本次会话的master secret。
  2. 客户端与服务器均使用此master
    secret生成本次会话的会话密钥(对称密钥)。在双方SSL握手结束后传递任何消息均使用此会话密钥。这样做的主要原因是对称加密比非对称加密的运算量低一个数量级以上,能够显著提高双方会话时的运算速度。
    8.
    客户端通知服务器此后发送的消息都使用这个会话密钥进行加密。并通知服务器客户端已经完成本次SSL握手。
    9.
    服务器通知客户端此后发送的消息都使用这个会话密钥进行加密。并通知客户端服务器已经完成本次SSL握手。
    10.
    本次握手过程结束,会话已经建立。双方使用同一个会话密钥分别对发送以及接受的信息进行加、解密。

1.1 生成keystore文件及导出证书

Xml代码

tomcat实现SSL配置
第一步 生成KeyStore

打开控制台:

<Connector port=”8443″ protocol=”HTTP/1.1″ SSLEnabled=”true”  

keytool -genkey -alias tomcat -keyalg RSA –keysize 1024 –validity 730
-keystore D:\server.keystore

运行:

               maxThreads=”150″ scheme=”https” secure=”true”  

输入keystore密码: ************ [Unknown]: localhost
[Unknown]: dept [Unknown]: Inc [Unknown]: bj [Unknown]: bj
[Unknown]: CN
CN=localhost, OU= dept, O= Inc, L=bj, ST=bj, C=CN 正确吗?
[否]: Y
Ychangeit (回车)

%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA

               clientAuth=”false” sslProtocol=”TLS”  

注意: localhost,是网站的域名或者ip,根据实际情况填写,比如 192.168.0.85
否则会出现证书上的名称无效,或者与站点名称不匹配。

按照要求一步步的输入信息,问你国家/地区代码的时候,输入cn。

               keystoreFile=”c:/tomcat.keystore” keystorePass=”tomcat”
/>  

建议:将生成的
server.keystore文件,放到%TOMCAT_HOME%或其子目录中(如:%TOMCAT_HOME%/conf)

输入密码的时候,这里使用:changeit

<Connector port=”8443″ protocol=”HTTP/1.1″ SSLEnabled=”true”

(其实放哪里都一样,只是放到%TOMCAT_HOME%里面会方便一些)

最后一步让你输入的时候,直接回车。

               maxThreads=”150″ scheme=”https” secure=”true”

第二步 修改server.xml

具体记录如下:

               clientAuth=”false” sslProtocol=”TLS”

修改%TOMCAT_HOME%/conf/server.xml

C:\Users\Administrator>%JAVA_HOME%\bin\keytool -genkey -alias
tomcat -keyalg RSA

               keystoreFile=”c:/tomcat.keystore” keystorePass=”tomcat”
/>2)key的生成

去掉下面SSL HTTP那个注释,修改为如下:

输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]: tuhao
您的组织单位名称是什么?
[Unknown]: tuhaojia
您的组织名称是什么?
[Unknown]: fnic
您所在的城市或区域名称是什么?
[Unknown]: didu
您所在的省/市/自治区名称是什么?
[Unknown]: didu
该单位的双字母国家/地区代码是什么?
[Unknown]: cn
CN=tuhao, OU=tuhaojia, O=fnic, L=didu, ST=didu, C=cn是否正确?
[否]: y

 键入命令并依次填入相应信息,

<Connector port=”8443″ protocol=”HTTP/1.1″ connectionTimeout=”20000″
redirectPort=”8443″
SSLEnabled=”true”
maxThreads=”150″
scheme=”https”
secure=”true”
clientAuth=”false”
sslProtocol=”TLS”
keystoreFile=”/conf/server.keystore”
keystorePass=”changeit”
/>
keystoreFile 是server.keystore放置的位置,keystorePass是密码
(默认密码是changeit)

输入 <tomcat> 的密钥口令
(如果和密钥库口令相同, 按回车):

C代码

第三步

  这里你要直接按回车。

C:\>keytool -genkey -alias tomcat -keyalg RSA -keysize 1024
-validity 365 -keystore tomcat.keystore  

重启Tomcat,访问地址

完毕后会在当前目录下,会产生一个:.keystore文件,将它拷贝到tomcat的bin目录下。

Enter keystore password:  tomcat  

(附录:)tomcat的配置文件SSL部分详细说明
配置文件server.xml,SSL部分: <!– A “Connector” represents an
endpoint by which requests are received
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL HTTP/1.1 Connector on port 8080
>
<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:/Tomcat/conf/tomcatKey.keystore”
keystorePass=”changeit”
algorithm=”SunX509″
/>
属性说明: port:这个port属性(默认值是8443)是
TCP/IP端口数码,Tomcat在其上监听安全连接。你可以把它更改成任何你愿意要的数值(如默认的https通信,数目是443)。不过,在许多操作系统中,要想在比1024小的端口数码上运行Tomcat,需要特殊的设置(它超出了这个文档资料的范围)。
redirectPort:
如果你在这里更改端口数值,你还必须更改在non-SSL连接器上的redirectPort
这个属性特定的值。这允许Tomcat自动地redirect那些试图访问有安全限制页面的用户,指明根据
Servlet 2.4 Specification要求,SSL是必需的 clientAuth:
如果你想要Tomcat要求所有的SSL客户在使用这个socket时出示用户认证书,把这个值设定为
true 。如果你想要Tomcat要求出示用户认证书,但是如果没有认证书也可以,
就把这个值设定为want 。 keystoreFile:
如果你产生的keystore文件不在Tomcat期望的默认地方(一个叫做.keystore
的文件在Tomcat运行的主目录),就添加这个属性。你可以指定一个绝对路径名称,
或者一个由$CATALINA_BASE环境变量而派生的相对路径名称。 keystorePass:
如果你使用一个不同的keystore(以及认证书)密码,而不是Tomcat期望的密码
(就是changeit),添加这个元素。 keystoreType: 如果使用一个PKCS12
keystore的话,就添加这个element。 有效的值是JKS 和 PKCS12 sslProtocol:
要在这个socket上被使用的加密/解密协定。如果你在使用Sun的JVM,我们不提倡更改
这个值。据报道,TLS协定的IBM’s 1.4.1 实现与一些通用的浏览器不兼容。
如果是这样,就使用value SSL ciphers:
这个socket允许使用的由逗号分隔开的加密密码列单。默认的情况下,任何可用的密码都允许被使用。
algorithm: 可用的X509算法。默认是Sun的实现( SunX509 )。 对于IBM
JVMs,你应该使用值 IbmX509。对于其他卖主,查阅JVM文档资料来 找正确的值。
truststoreFile: 用来验证用户认证书的TrustStore文件。 truststorePass:
访问TrustStore的密码。默认值就是keystorePass的值。 truststoreType:
如果你在使用与KeyStore不同格式的TrustStore,添加这个元素。
合法的值是JKS和PKCS12 keyAlias: 如果 keystore 里面有多个
key,你可以为用这个选项为加入的 key 起一个名字。
如果没有指定名字,使用时 keystore 内的第一个 key 将会被使用。

从控制台进入tomcat的bin目录,本机环境是:D:\Tomcat7\bin>

What is your first and last name?  

此前我一直对https/ssl如何保护数据不被窃
听有点疑问,因为服务器的证书是公开的,只能实行上行方向的数据加密,下行数据的加密我一直认为是浏览器会自动生成一个客户端的密钥对并将公钥发给服务器。仔细研究了https/ssl后发现其实并不像我想的那样,这里面既有非对称加密,又因为性能原因使用了对称加密。

导出证书文件:

  [Unknown]:  vincent  

基本的加解密算法类型也就这两种:

D:\Tomcat7\bin>keytool -selfcert -alias tomcat -keystore
.keystore
输入密钥库口令:(此处为上面生成证书时输入的changeit)

What is the name of your organizational unit?  

对称加密
:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;

D:\Tomcat7\bin>keytool -export -alias tomcat -keystore .keystore
-storepass changeit -rfc -file tomcat.cer

  [Unknown]:  beijing  

非对称加密
:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。

存储在文件 <tomcat.cer> 中的证书

What is the name of your organization?  

明白了这两种加密类型,具体的认证过程就容易理解了:

此时会在D:\Tomcat7\bin>下生成tomcat.cer证书文件。将该文件发给使用者,让他们安装该证书,并将证书安装在“受信任的根证书颁发机构”区域中。具体的操作步骤可以参照铁道部12306.cn网站证书的安装步骤。它们是一样一样一样的。

  [Unknown]:  peking  

客户端浏览器连接到https/ssl服务器,并发送ssl版本号等信息到服务器,协商此次连接使用的版本和参数。

 

What is the name of your City or Locality?  

服务器根据客户端发来的协商数据和自身支持的特性返回客户端协商参数,并且将服务器的证书发送给客户端,服务器的证书里包括用于非对称加密的服务器的公钥。

1.2 配置tomcat

  [Unknown]:  shanghai  

客户端收到服务器的证书,可以用于鉴别服务器身份,防止假冒的服务器。但最重要的用处是将一段由客户端浏览器随机生成的数据pre-master
secret用服务器证书里的公钥进行加密,发给服务器。注意,因为这段加密的数据只由用服务器的私钥才能解密,所以pre-master
secret不会被人监听到。

打开$CATALINA_BASE/conf/server.xml 找到“SSL HTTP/1.1 Connector”
那一块,取消注释并将它改成:

What is the name of your State or Province?  

服务器收到加密后的pre-master
secret数据后,用自己的私钥解密得到原始的pre-master
secret,并使用一定算法得到对称加密的密钥master secret。

<Connector port=”443″ protocol=”HTTP/1.1″ SSLEnabled=”true”

  [Unknown]:  shanghai  

客户端也根据同样的算法得到master secret。

maxThreads=”150″ scheme=”https” secure=”true”
keystoreFile=”bin/.keystore” keystorePass=”changeit” 
clientAuth=”false” sslProtocol=”TLS” />

What is the two-letter country code for this unit?  

至此,客户端和服务器之间的上/下行数据传送使用对称加/解密,初始密钥为master
secret。常用的对称加密算法有RC4,AES等。

 

  [Unknown]:  sh  

经过这些步骤就可以保证https/ssl上下行数据不被监听并且加/解密速度也可以接受。

请注意,这里我已经将tomcat的端口改成了80,相应的,https的端口我也改成了443(即默认的https端口)。

Is CN=vincent, OU=beijing, O=peking, L=shanghai, ST=shanghai, C=sh
correct? (type “yes” or “no”)  

  1. 生成证书

修改windows机器的host文件,增加一行(我的机器的ip是192.168.68.75):

  [no]:  yes  

这里用到的文件,我们存放在D:/SSL/文件夹内,其中D:/SSL/server/内的文件是要交给服务器用的,D:/SSL/client/内的文件是要交给客户端用的。

192.168.68.75 tuhao

  

1.1生成服务端证书

 接下来重启tomcat,用

Enter key password for <tomcat>:  

开始-运行-CMD-在dos窗口执行下执行命令:

 

        (RETURN if same as keystore password):  

keytool -genkey -v -alias tomcat -keyalg RSA -keystore
D:/SSL/server/tomcat.keystore -dname
“CN=127.0.0.1,OU=zlj,O=zlj,L=Peking,ST=Peking,C=CN” -validity 3650
-storepass zljzlj -keypass zljzlj

 

C:\>keytool -genkey -alias tomcat -keyalg RSA -keysize 1024
-validity 365 -keystore tomcat.keystore

说明:

 

Enter keystore password:  tomcat

keytool 是JDK提供的证书生成工具,所有参数的用法参见keytool –help

接下来将演示linux下配置tomcat的https。

What is your first and last name?

-genkey 创建新证书

 

  [Unknown]:  vincent

-v 详细信息

2.linux下设置:

What is the name of your organizational unit?

-alias tomcat 以”tomcat”作为该证书的别名。这里可以根据需要修改

2.1生成keystore文件及导出证书

  [Unknown]:  beijing

-keyalg RSA 指定算法

这一步和在windows下操作差不多,只是环境变量的引用方式不一样,并且,这次我们指定生成的文件存储的目录:

发表评论

电子邮件地址不会被公开。 必填项已用*标注