对称加密:加密和解密用的是同样的密钥。
非对称加密:使用一对密钥,公钥和私钥,私钥只由一方保管,不能外泄;公钥可以发给任何请求它的人
那么得到公钥的一方怎么确定这个公钥是服务器发过来的呢?
这个就需要就公钥到第三方认证机构认证,生成数字证书,这个数字证书里面包含有公钥。
现在客户端要向服务器发送消息,服务器怎么知道这个消息是A发过来的而不是B或者C发过来的呢?
这时客户端也生成一对公钥和私钥,私钥自己保管,公钥向外发布。客户端将数据和数据的数字签名(也叫消息摘要,数据经MD5算法生成的)一起用私钥加密,然后传送给服务器端。
服务器能用公钥打开,说明是A发过来的(不是B或C);再将数据用MD5算法生成消息摘要,与传送过来的消息摘要是一致的说明数据没有被篡改。
对称加密和非对称加密比较
(1) 对称加密加密与解密使用的是同样的密钥,所以速度快,但由于需要将密钥在网络传输,所以安全性不高。
(2) 非对称加密使用了一对密钥,公钥与私钥,所以安全性高,但加密与解密速度慢。
(3) 解决的办法是将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。
在实际开发中我们一般将对称加密的密钥使用非对称加密算法来传送过去。
(1) Alice需要在银行的网站做一笔交易,她的浏览器首先生成了一个随机数作为对称密钥。
(2) Alice的浏览器向银行的网站请求公钥。
(3) 银行将公钥发送给Alice。
(4) Alice的浏览器使用银行的公钥将自己的对称密钥加密。
(5) Alice的浏览器将加密后的对称密钥发送给银行。
(6) 银行使用私钥解密得到Alice浏览器的对称密钥。
(7) Alice与银行可以使用对称密钥来对沟通的内容进行加密与解密了。
tomcat配置加密的链接器
使用jdk自带的keytool工具生成密钥库输入:
1,keytool -genkey -alias tomcat -keyalg RSA,接着注意您的名字和姓氏填写网站名如localhost。生成keystore文件。
2,将.keystore文件放到tomcat的conf文件夹下面。
3,在conf文件夹下有一个server.xml文件,配置htttps连接器,加入参数keystoreFile和keystorePass。
如果想将所有请求都转化为https连接,可以将8443端口修改为443端口,同时修改conf文件夹下面的web.xml,在<welcom-list-file/>标签后面加入下面这一段话。
- <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>