• 互联网的加密原理


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

    对称加密

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

     

     

  • 相关阅读:
    20182311 2019-2020-1 《数据结构与面向对象程序设计》课程总结
    20182311 2019-2020-1 《数据结构与面向对象程序设计》实验九报告
    20182311 2019-2020-1 《数据结构与面向对象程序设计》第10周学习总结
    java实现哈夫曼树进行文件加解压
    20182311 2019-2020-1 《数据结构与面向对象程序设计》第9周学习总结
    20182311 2019-2020-1 《数据结构与面向对象程序设计》实验八报告
    20182311 2019-2020-1 《数据结构与面向对象程序设计》实验七报告
    CTF学习笔记
    CTGAN
    安卓数据库的实现与应用
  • 原文地址:https://www.cnblogs.com/lyy-2016/p/9140341.html
Copyright © 2020-2023  润新知