javaWeb https连接器

来源:互联网 发布:mac版剪辑视频软件 编辑:程序博客网 时间:2024/05/16 16:11

互联网加密原理

tomcat服务器启动时候会启动多个Connector(连接器),而Tomcat服务器的连接器又分为加密连接器和非加密连接器 。(一般我们使用http协议的是非加密,https的是加密的)

<Connector port="8080" protocol="HTTP/1.1"               connectionTimeout="20000"               redirectPort="8443" />

上面的这个Connector 就是非加密的。如果要使用加密的链接,则需要新增Connector 。

对称加密

所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。
加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要。因为加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必须要解决的问题。
常用的对称加密有:DES、IDEA、RC2、RC4、SKIPJACK、RC5、AES算法等。

非对称加密

非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。

公开密钥与私有密钥是一对,如果用公开密钥 对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密 钥,所以这种算法叫作非对称加密算法。

非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行 加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。

另一方面,甲方可以使用乙方的公钥对机密信息进行签名后再发送给乙方;乙 方再用自己的私匙对数据进行验签。

非对称加密工作原理

  1.A要向B发送信息,A和B都要产生一对用于加密和解密的公钥和私钥。
  2.A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A。
  3.A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。
  4.A将这个消息发给B(已经用B的公钥加密消息)。
  5.B收到这个消息后,B用自己的私钥解密A的消息。其他所有收到这个报文的人都无法解密,因为只有B才有B的私钥

发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密,这样,信息就可以安全无误地到达目的地了,即使被第三方截获,由于没有相应的私钥,也无法进行解密。通过数字的手段保证加密过程是一个不可逆过程,即只有用私有密钥才能解密。

非对称性加密依然没有解决数据传输的安全性问题,比如A想向B发数据,B首先生成一对密钥(公钥和私钥),然后将公钥发给A,A拿到B发给他的 公钥有就可以使用公钥加密数据后发给B,然而在B公钥发送给A的这个过程中,很有可能会被第三方C截获,C截获到B的公钥后,也使用B的公钥加密数据,然 后发给B,B接收到数据后就晕了,因为搞不清楚接收到的数据到底是A发的还是C发的,这是其中一个问题,另一个问题就是,C截获到B发的公钥后,C可以自 己生成一对密钥(公钥和私钥),然后发给A,A拿到公钥后就以为是B发给他的,然后就使用公钥加密数据发给B,发送给B的过程中被C截获下来,由于A是用 C发给他的公钥加密数据的,而C有私钥,因此就可以解密A加密过后的内容了,而B接收到A发给他的数据后反而解不开了,因为数据是用C的公钥加密的,B没 有C的私钥,所以就无法解密。

所以,非对称性加密存在一个问题:A想向B发数据,A如何确定拿到的公钥一定是B发的呢?那么如何解决这个问题呢?只能靠一个第三方机构(CA机构,即证书授权中心(Certificate Authority ),或称证书授权机构)来担保。A想向B发数据,B首先将公钥发给CA 机构,CA机构拿到B的公钥后跑到B的家里问:这是你发的公钥吗?B确认过后说是:没错,是我发的!那么此时CA机构就会为B的公钥做担保,生成一份数字 证书给B,数字证书包含了CA的担保认证签名和B的公钥,B拿到CA的这份数字证书后,就发给A,A拿到数字证书后,看到上面有CA的签名,就可以确定当 前拿到的公钥是B发的,那么就可以放心大胆地使用公钥加密数据,然后发给B了。

HTTPS连接器

浏览器想将数据加密后再发送给服务器,那么该怎么做呢?服务器首先要向浏览器出示一份数 字证书,浏览器看到数字证书后,就可以使用数字证书里面的公钥加密数据,所以要想做浏览器和服务器的加密数据传输,那么首先得针对服务器生成一份数字证 书。然后再配置一下服务器,让服务器收到浏览器的请求之后,会向浏览器出示它的数字证书。

java有个制作证书的工具keytool, 在JDK 1.4以后的版本中都包含了这一工具,它的位置为<JAVA_HOME>\bin\keytool.exe

可以cmd打开输入框输入:

 

keytool -v -genkey -alias tomcat -keyalg RSA -keystore d:/tomcat.keystore

 

回车后:

 “y”进行确认:
我们可以进入D盘下找到 名为“tomcat.keystore”的文件。
然后,我们修改server.xml文件,先确保原有的所有<Connector port="8443" 的全部注释掉(8080或者80端口还是可以继续留着的),然后加入:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"            maxThreads="150" scheme="https" secure="true"            clientAuth="false" keystoreFile="d:/tomcat.keystore" keystorePass="123456"            sslProtocol="TLS"/>

保存并关闭,重新启动tomcat,在浏览器 输入“https://127.0.0.1:8443/”后,

也就是我们已经设置成功了。

此时允许访问:

 
至于浏览器 添加信任证书和移除信任证书的办法,网上多的是,在此不再赘述。
 

上述命令相关内容介绍

keytool -genkey:自动使用默认的算法生成公钥和私钥

-alias[名称]:给证书取个别名

-keyalg:制定密钥的算法,如果需要制定密钥的长度,可以再加上keysize参数,密钥长度默认为1024位,使用DSA算法时,密钥长度必须在512到1024之间,并且是64的整数倍

-keystore:参数可以指定密钥库的名称。密钥库其实是存放迷药和证书文件,密钥库对应的文件如果不存在会自动创建。

-validity:证书的有效日期,默认是90天

-keypass changeit:不添加证书密码

-storepass changeit:不添加存储证书的密码

原创粉丝点击