什么是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

https理论及实践的更多相关文章

  1. 关于HTTPS理论和实践

    Summary: HTTP 通信时,可能信息被监听.服务器或客户端身份伪装等安全问题,HTTPS 则能有效解决这些问题. 原始的HTTP连接的时候,因服务器与用户之间是直接进行明文传输,导致用户面临着 ...

  2. Java 理论与实践: 流行的原子——新原子类是 java.util.concurrent 的隐藏精华(转载)

    简介: 在 JDK 5.0 之前,如果不使用本机代码,就不能用 Java 语言编写无等待.无锁定的算法.在 java.util.concurrent 中添加原子变量类之后,这种情况发生了变化.请跟随并 ...

  3. DDD(领域驱动设计)理论结合实践

    DDD(领域驱动设计)理论结合实践   写在前面 插一句:本人超爱落网-<平凡的世界>这一期,分享给大家. 阅读目录: 关于DDD 前期分析 框架搭建 代码实现 开源-发布 后记 第一次听 ...

  4. 浅读《视觉SLAM十四讲:从理论到实践》--操作1--初识SLAM

    下载<视觉SLAM十四讲:从理论到实践>源码:https://github.com/gaoxiang12/slambook 第二讲:初识SLAM 2.4.2 Hello SLAM(书本P2 ...

  5. 监督学习——决策树理论与实践(下):回归决策树(CART)

    介绍 决策树分为分类决策树和回归决策树: 上一篇介绍了分类决策树以及Python实现分类决策树: 监督学习——决策树理论与实践(上):分类决策树          决策树是一种依托决策而建立起来的一种 ...

  6. 从理论到实践,全方位认识DNS

    从理论到实践,全方位认识DNS 2015-11-23 程序员之家 作者:selfboot 原文:http://segmentfault.com/a/1190000003956853 对于 DNS(Do ...

  7. 计算广告CTR预估系列(七)--Facebook经典模型LR+GBDT理论与实践

    计算广告CTR预估系列(七)--Facebook经典模型LR+GBDT理论与实践 2018年06月13日 16:38:11 轻春 阅读数 6004更多 分类专栏: 机器学习 机器学习荐货情报局   版 ...

  8. 推荐系统系列(四):PNN理论与实践

    背景 上一篇文章介绍了FNN [2],在FM的基础上引入了DNN对特征进行高阶组合提高模型表现.但FNN并不是完美的,针对FNN的缺点上交与UCL于2016年联合提出一种新的改进模型PNN(Produ ...

  9. 视觉SLAM十四讲:从理论到实践 两版 PDF和源码

    视觉SLAM十四讲:从理论到实践 第一版电子版PDF 链接:https://pan.baidu.com/s/1SuuSpavo_fj7xqTYtgHBfw提取码:lr4t 源码github链接:htt ...

随机推荐

  1. OpenCV多版本切换和配置--opencv 安装与卸载、添加 opencv_contrib modules 以及 OpenCv 多版本切换

    1. 查看安装Opencv的版本.以及libs和cflags $ pkg-config --modversion opencv $ pkg-config --cflags opencv // 编译链接 ...

  2. Java编程思想:擦除的神秘之处

    import java.lang.reflect.Array; import java.util.ArrayList; import java.util.List; public class Test ...

  3. 【题解】P1396 营救-C++

    原题传送门 这道题目基本就是一个克鲁斯卡尔最小生成树的模板题,唯一不同的是,这道题目的最终目标不是所有点相连,而是只要s和t相连就可以了.还有就是这道题目求的是最小生成树中的最大边权值.但是,克鲁斯卡 ...

  4. 从后端到前端之Vue(三)小结以及一颗真实的大树

    上一篇写了一下tab,下面整理一下用过的知识点,本想按照官网的文档,整理一下可以更清晰,结果也许是我的方法不对吧,总之更模糊了. 按照官网文档的顺序整理到了表单输入绑定之前,因为之前大致也就只涉及到这 ...

  5. git取消链接并删除本地库

    有的时候我们需要删除从GitHub上克隆下来的库 从github上clone一个仓库: git clone git@github.com:USERNAME/repo.git 在本地目录下关联远程rep ...

  6. 彻底搞懂Python切片操作

        在利用Python解决各种实际问题的过程中,经常会遇到从某个对象中抽取部分值的情况,切片操作正是专门用于完成这一操作的有力武器.理论上而言,只要条件表达式得当,可以通过单次或多次切片操作实现任 ...

  7. R语言学习笔记——C#中如何使用R语言setwd()函数

    在R语言编译器中,设置当前工作文件夹可以用setwd()函数. > setwd("e://桌面//")> setwd("e:\桌面\")> s ...

  8. 【Spring】org.springframework.web.context.ContextLoaderListen 报错

    详细信息如下: org.apache.catalina.core.StandardContext.listenerStart Error configuring application listene ...

  9. 【iOS】Xcode 离线文档

    Xcode 本身下载太慢…… Apple 官方文档地址:https://developer.apple.com/library/downloads/docset-index.dvtdownloadab ...

  10. 【Android】INSTALL_FAILED_UPDATE_INCOMPATIBLE

    多是因为已经安装过该 apk 文件了,一般卸载了重新运行就 OK 了.