zoukankan      html  css  js  c++  java
  • 互联网的加密原理

    加密主要有两种方式:对称加密和非对称加密。

    对称加密

    对称加密:采用单钥密码系统的加密方法,同一个密钥可以同时作为信息的加密和解密,这种方式也叫做单密钥加密。所谓的对称,就是采用这种加密方式的双方使用同样的密钥进行加密和解密。 
    密钥是控制加密和解密过程的指令,算法是一组规则,规定了如何进行加密解密。 
    加密的安全性不仅取决于加密算法本身,更在于密钥管理的安全性。 
    由于对称加密速度快,所以通常用在消息发送方需要加密大量数据时使用。但是因为加密和解密都使用同一个密钥,如何把密钥安全的传递到解密者手上就成了必须要解决的问题。 
    常用的对称加密有: DES, IDEA, RC2, RC4, SKIPJACK, RC5, AEC算法等。

    非对称加密

    非对称加密算法需要两个密钥:公钥和私钥 
    公钥和私钥是一对,如果用公钥加密,只能用对应的私钥才能解密;如果用私钥加密,那么只能用对应的公钥解密。由于加密和解密使用的是两个不同的密钥,所以叫这种加密算法叫做非对称加密算法。 
    工作原理: 
    1. A向B发送信息,A和B都要产生一对用于加密和解密的公钥和私钥; 
    2. A的私钥保密,把公钥给B;B的私钥保密,把公钥给A; 
    3. A发消息给B,A用B的公钥加密信息,然后将信息发给B; 
    4. B收到信息后,用自己的私钥解密。 
    也就是说,发送方用接收方的公钥加密,接收方用自己的私钥解密,这样信息就可以安全无误的到达了。但是依然存在以下问题: 
    1.A想发数据给B,那么B先生成一对密钥,然后将自己的公钥发给A。但是在发公钥的过程中很可能被第三方C截获。C截获B的公钥之后可能会做几件事: 
    (1)使用B的公钥对数据加密然后发给B,B此时无法分清这个消息是A发的还是C发的 
    (2)C自己生成一对密钥,将公钥发给A,A收到公钥以为是B发的,用这个公钥加密之后发消息给B,发给B的过程中被C拦截,C有私钥,可以知道消息的内容。 
    那么这些问题该如何解决呢? 
    只能靠一个第三方机构(CA机构,即证书授权机构)来担保。 
    此时的流程就是: 
    1. A要向B发送数据,B首先将公钥发给CA机构,CA机构收到B的公钥之后向B确认这个是否是B发送的公钥; 
    2. CA机构确认是B发送的公钥之后就会为B担保,生成一份数字证书给B,数字证书包含了CA的担保认证签名和B的公钥,A拿到CA的数字证书后,看到上面有CA的签名,就可以确定当前拿到的公钥是B发的,这样就可以放心的使用公钥加密数据然后发给B了

    Tomcat服务器与加密解密

    Tomcat服务器启动时会启动多个Connector(连接器),而Tomcat服务器的连接器又可以分为加密连接器和非加密连接器。在server.xml中有配置Connector:

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

    8080这个端口对应的连接器就是没有加密的Connector,在请求资源时我们的请求也是不加密的。要是想要以加密的方式来访问Tomcat服务器,就需要在Tomcat里配置一个加密的Connector。 
    浏览器与服务器交互时,浏览器想要将数据加密之后再发送给服务器,该怎么做呢? 
    首先,服务器要先向浏览器出示一份数字证书,浏览器看到数字证书之后,就可以使用数字证书里的公钥加密数据。因此得针对服务器生成一份数字证书。然后再配置一下服务器,让服务器收到浏览器的请求后,向浏览器出示它的数字证书。 
    生成Tomcat服务器的数字证书 
    sun公司提供了制作证书的工具keytool,在JDK1.4以后版本中都包含了这个工具,它在JAVA_HOMEinkeytool.exe。使用keytool生成一个名为tomcat的证书,放在.keystore这个密钥库中。

    keytool -genkey -alias tomcat -keyalg RSA

    Capture17.PNG-19.6kB

    命令执行完之后,操作系统的用户文件夹下就会生成.keystore文件,如图: 
    Capture18.PNG-14.4kB 
    可以使用指令查看.keystore密钥库里面的所有证书

    keytool -list -keystore .keystore

    Capture19.PNG-6.3kB

     

    配置HTTP连接器 
    将生成的.keystore密钥库文件拷贝到Tomcat服务器的conf目录下,如下图所示: 
    Capture20.PNG-17.4kB 
    修改server.xml文件,配置HTTP连接器:

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
                   maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
                   clientAuth="false" sslProtocol="TLS" 
                   keystoreFile="conf/.keystore" keystorePass="123456"/>

    配置了一个端口是8443的加密连接器,浏览器访问8443端口的连接器时,将会以加密的方式访问web服务器,这个连接器收到浏览器的请求后,将会向浏览器出示一份数字证书,浏览器再用数字证书里的公钥来加密数据。服务器从密钥库中提取证书时需要密码,keystorePass这个属性就是指明了密码。 
    使用"https://localhost:8443/"访问8443的加密连接器 
    Capture21.PNG-70.9kB

     由于密钥库里的证书时我们自己生成的,并没有经过CA认证,所以在访问的时候,浏览器会出现"证书错误,导航已阻止"这种情况,浏览器会认为当前要访问的这个主机是不安全的,不推荐访问,点击"继续浏览此网站"即可。 
    Capture22.PNG-104.3kB

     安装数字证书   
    为了让浏览器信任我们生成的数字证书,需要将数字证书安装到浏览器中,以IE8为例来安装证书,过程如下: 
    Capture23.PNG-121kB
    Capture24.PNG-188.1kB   
    Capture25.PNG-61.9kB   
    证书安装成功后,重启IE浏览器,使用"https://localhost:8443/"访问8443的加密连接器,此时浏览器就不再提示证书错误了。

     删除数字证书 
    工具----->Internet选项 
    Capture27.PNG-142.9kB
    删除后重启浏览器即可。   

     

     

  • 相关阅读:
    Java 第十一届 蓝桥杯 省模拟赛 梅花桩
    Java 第十一届 蓝桥杯 省模拟赛 梅花桩
    Java 第十一届 蓝桥杯 省模拟赛 梅花桩
    Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
    Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
    Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
    Java 第十一届 蓝桥杯 省模拟赛 最大的元素距离
    Java 第十一届 蓝桥杯 省模拟赛 递增序列
    Java 第十一届 蓝桥杯 省模拟赛 递增序列
    Java 第十一届 蓝桥杯 省模拟赛 最大的元素距离
  • 原文地址:https://www.cnblogs.com/lyy-2016/p/9140341.html
Copyright © 2011-2022 走看看