zoukankan      html  css  js  c++  java
  • https理论及实践

    什么是https协议?

    http协议以明文的方式在网络中传输,安全性难以保证,https在http协议的基础上加入SSL/TLS层。TLS是SSL协议的最新版本,SSL使用SSL数字证书在通信两端建立加密链路,对两端通信数据进行加密,从而保证通信数据安全。
    http和https协议比较如下:

    SSL协议工作原理


    SSL协议主要涉及非对称加密和对称加密技术。
    非对称加密,使用一对密钥加解密数据,公钥(public key)对外公开,私钥自己保留(private key)。使用私钥加密的数据只有对应的公钥才能解密。SSL使用非对称加密进行通信初始化(SSL handshake),非对称加密算法包括RSA,、DSA、PKCS等。

    对称加密,加解密都用同一个key。SSL在通信初始化(handshake)后,用session key进行对称加密通信。对称加密算法包括AES-128, AES-192 and AES-256。

    SSL协议通信包括两个阶段:SSL handshake和数据传输。SSL handshake阶段使用非对称加密,数据传输阶段使用对称加密。

    SSL handshake包含以下步骤:

    1. 客户端发送"client hello"消息,这条消息中包含客户端SSL版本以及其它服务端需要的信息。
    2. 服务端回复"server hello"消息,这条消息包含服务端SSL版本,包含public key的SSL数字证书及其它信息。
    3. 客户端发送请求给CA(Certificate Authority,证书颁发机构)对服务端进行身份验证。验证失败则拒绝建立SSL连接,否则继续4.
    4. 客户端生成session key,用服务端的public key加密,并发送给服务端。假如服务端也要求验证客户端,客户端也需要发送自己的证书(一般是server之间的通信需要)。
    5. 服务端用自己的private key解密出session key,并用session key加密发送确认消息。

    数据传输阶段如下,用SSL handshake阶段生成的session key对数据进行对称加密通信。和非对称加密相比,对称加密简单、加解密速度会更快。

    SSL证书

    SSL证书是由CA机构颁发的含服务端public key及其它信息的数据文件。比如google的数字证书如下,可以点击详细信息查看更多证书内容。


    数字证书由X.509标准定义,X.509使用Abstract Syntax Notation One (ASN.1)标记去表示数字证书结构。数字证书一般包含下面这些域。

    SSL证书基于验证级别和认证domain数可分为不同类型,基于验证级别可分为Domain Validated Certificates(DV,域名型)、Organization Validated Certificates(OV,企业型)、Extended Validated Certificates(EV,企业增强型)。域名型证书用于验证单个域名,企业型证书可验证某域名下的所有子域名,比如*.killianxu.cn,企业增强型证书可用于验证不相关的多个相关域名。基于domain数可分为Single Domain Certificate、Wildcard SSL Certificate和Unified SSL Certificate /Multi-Domain SSL Certificate/SAN Certificate。

    获取SSL证书

    SSL证书可以从CA机构购买或者从免费CA机构获取。在申请证书时可能需要提交Certificate Signing Request (CSR)。CSR是由openssl等SSL tools工具或服务器生成的Base64编码文本。内含公钥、域名、组织、地址等信息,CA机构颁发的证书中就包含CSR中的公钥信息。CSR文本由-----BEGIN NEW CERTIFICATE REQUEST-----"开始,并由"-----END NEW CERTIFICATE REQUEST-----结束,CSR格式如下:

    可在线生成CSR和private key两个文件。

    生成csr文件后,可申请免费DV类型SSL证书。
    腾讯云可免费申请域名验证级别的SSL证书,生成证书过程自动生成CSR。

    生成的证书可下载安装到server。SSL证书有不同的格式,PEM和PKCS#7使用Base64编码,DER和 PKCS#12使用二进制编码。

    腾讯云申请的证书如下,其中包含了适用于几种主流服务器的证书格式,其中www.killianxu.cn.csr为自动生成的CSR文件。

    安装SSL证书

    每种服务器证书安装方法都不一样,本文讲解在tomcat上的安装。在安装前若证书格式和服务器支持的证书格式不一样,需要利用OpenSSL转换。
    在tomcat安装路径下conf/server.xml增加如下SSL/TLS配置,支持https:

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
    maxThreads="150" SSLEnabled="true" scheme="https">
    <SSLHostConfig>
    <Certificate certificateKeystoreFile="conf/www.killianxu.cn.jks" certificateKeystorePassword="d62spdpc5se3an" certificateKeyAlias="www.killianxu.cn"
    type="RSA" />
    </SSLHostConfig>
    </Connector>

    强制所有的http访问重定向到https,在conf/web.xml的结束标签web-app强增加配置:

    <login-config>  
        <!-- Authorization setting for SSL -->  
        <auth-method>CLIENT-CERT</auth-method>  
        <realm-name>Client Cert Users-only Area</realm-name>  
    </login-config>  
    <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> 

    重启tomcat

    验证证书安装成功


    输入:curl -v https://www.killianxu.cn:8443/test.html

    可看到1部分获取到SSL证书信息,2部分获取网页数据

    输入:curl -v http://www.killianxu.cn:9999/test.html

    http协议收到302重定向状态码,并有Location重定向新路径

    参考文献


    https://www.tutorialsteacher.com/https
    https://yevon-cn.github.io/2017/04/09/https-config-of-tomcat.html

  • 相关阅读:
    yzoj P2344 斯卡布罗集市 题解
    yzoj P2350 逃离洞穴 题解
    yzoj P2349 取数 题解
    JXOI 2017 颜色 题解
    NOIP 2009 最优贸易 题解
    CH 4302 Interval GCD 题解
    CH4301 Can you answer on these queries III 题解
    Luogu2533[AHOI2012]信号塔
    Luogu3320[SDOI2015]寻宝游戏
    Luogu3187[HNOI2007]最小矩形覆盖
  • 原文地址:https://www.cnblogs.com/killianxu/p/11367691.html
Copyright © 2011-2022 走看看