什么是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. http接口测试和使用,首先要了解什么是http请求

    http接口测试和使用,首先要了解什么是http请求: http请求通俗讲就是把客户端的东西通过http协议发送到服务端,服务端根据http协议的定义解析客户端发过 来的东西! http请求中常用到的 ...

  2. React躬行记(8)——样式

    由于React推崇组件模式,因此会要求HTML.CSS和JavaScript混合在一起,虽然这与过去的关注点分离正好相反,但是更有利于组件之间的隔离.React已将HTML用JSX封装,而对CSS只进 ...

  3. spring配置文件比较全的约束

    个人总结:Spring的配置文件applicationContext.xml约束文件.全面约束 <?xml version="1.0" encoding="utf- ...

  4. [leetcode]375 Guess Number Higher or Lower II (Medium)

    原题 思路: miniMax+DP dp[i][j]保存在i到j范围内,猜中这个数字需要花费的最少 money. "至少需要的花费",就要我们 "做最坏的打算,尽最大的努 ...

  5. vue.js 中组件的使用

    Vue中组件的使用 方式一 1.使用Vue.extend创建组件 var com1 = Vue.extend({ template: '<h3>这是使用 Vue.extend 创建的组件& ...

  6. thymeleaf常用属性

    转 作者:ITPSC 出处:http://www.cnblogs.com/hjwublog/   th:action 定义后台控制器路径,类似<form>标签的action属性. 例如: ...

  7. 日常用shell命令

    递归更改文件夹权限:chmod -R 767 文件名 mac启动apache sudo apachectl start/restart mac停止apache sudo apachectl stop ...

  8. 异步请求xhr、ajax、axios与fetch的区别比较

    目录 1. XMLHttpRequest对象 2. jQuery ajax 3. axios 4. fetch 参考 why: 为什么会出现不同的方法呢? what: 这些都是异步请求数据的方法.在不 ...

  9. 【MySQL】导出长数字到 Excel 避免转为科学计数法方法

    MySQL 导出比较长的数字到 Excel 时,最后几位会变成 0,解决方法如下: 如果只需要导出展示.打印:可使用 CONCAT("\t",str) 如果需要后续处理,引用,最好 ...

  10. 【iOS】iOS 调试快速定位程序在哪崩溃

    iOS 开发过程中经常遇到程序崩溃.快速定位程序在哪崩溃的步骤如下: 1. 2. 3. 这样设置后,程序崩溃时会定位到崩溃的语句,如下: 原文链接:iOS开发何如在调试的时候轻松找到程序在哪里崩溃