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
https理论及实践的更多相关文章
- 关于HTTPS理论和实践
Summary: HTTP 通信时,可能信息被监听.服务器或客户端身份伪装等安全问题,HTTPS 则能有效解决这些问题. 原始的HTTP连接的时候,因服务器与用户之间是直接进行明文传输,导致用户面临着 ...
- Java 理论与实践: 流行的原子——新原子类是 java.util.concurrent 的隐藏精华(转载)
简介: 在 JDK 5.0 之前,如果不使用本机代码,就不能用 Java 语言编写无等待.无锁定的算法.在 java.util.concurrent 中添加原子变量类之后,这种情况发生了变化.请跟随并 ...
- DDD(领域驱动设计)理论结合实践
DDD(领域驱动设计)理论结合实践 写在前面 插一句:本人超爱落网-<平凡的世界>这一期,分享给大家. 阅读目录: 关于DDD 前期分析 框架搭建 代码实现 开源-发布 后记 第一次听 ...
- 浅读《视觉SLAM十四讲:从理论到实践》--操作1--初识SLAM
下载<视觉SLAM十四讲:从理论到实践>源码:https://github.com/gaoxiang12/slambook 第二讲:初识SLAM 2.4.2 Hello SLAM(书本P2 ...
- 监督学习——决策树理论与实践(下):回归决策树(CART)
介绍 决策树分为分类决策树和回归决策树: 上一篇介绍了分类决策树以及Python实现分类决策树: 监督学习——决策树理论与实践(上):分类决策树 决策树是一种依托决策而建立起来的一种 ...
- 从理论到实践,全方位认识DNS
从理论到实践,全方位认识DNS 2015-11-23 程序员之家 作者:selfboot 原文:http://segmentfault.com/a/1190000003956853 对于 DNS(Do ...
- 计算广告CTR预估系列(七)--Facebook经典模型LR+GBDT理论与实践
计算广告CTR预估系列(七)--Facebook经典模型LR+GBDT理论与实践 2018年06月13日 16:38:11 轻春 阅读数 6004更多 分类专栏: 机器学习 机器学习荐货情报局 版 ...
- 推荐系统系列(四):PNN理论与实践
背景 上一篇文章介绍了FNN [2],在FM的基础上引入了DNN对特征进行高阶组合提高模型表现.但FNN并不是完美的,针对FNN的缺点上交与UCL于2016年联合提出一种新的改进模型PNN(Produ ...
- 视觉SLAM十四讲:从理论到实践 两版 PDF和源码
视觉SLAM十四讲:从理论到实践 第一版电子版PDF 链接:https://pan.baidu.com/s/1SuuSpavo_fj7xqTYtgHBfw提取码:lr4t 源码github链接:htt ...
随机推荐
- linux 不重启识别新添加的硬盘
1.fdisk -l 看有没有新的磁盘 oebiotech@hadoop08:/media/nbc9$ sudo fdisk -l |grep sdl 2.查看主机总线 oebiotech@hadoo ...
- uSID:SRv6新范式
摘要:本文介绍最新的SRv6创新uSID(Micro Segment).uSID兼容既有的SRv6框架,将极大地改变SRv6的设计.实现和部署方式,成为SRv6的新范式. 一.SRv6 101 Seg ...
- SpringBoot基于数据库实现简单的分布式锁
本文介绍SpringBoot基于数据库实现简单的分布式锁. 1.简介 分布式锁的方式有很多种,通常方案有: 基于mysql数据库 基于redis 基于ZooKeeper 网上的实现方式有很多,本文主要 ...
- jQuery - parents() 获得最近的祖先元素方法
答案 : parents()[0] <div class="pg-ins layer p_close"> <div class="sign_con&qu ...
- Sublime Text 3 实现C语言代码的编译和运行
Sublime Text 3 是一款优秀的代码编辑软件.界面简洁,轻巧快速,很受大家的欢迎. 最近开始用他来编辑数据结构的C语言代码,这就需要在新建编译系统.具体方法如下: 首先: 接下来是关键的一步 ...
- java 金额的大小写转换类
/** *金额大小写转换工具类 */ public class MoneyUtil { /** 大写数字 */ private static final String[] NUMBERS = { &q ...
- 基于SpringBoot+Redis的Session共享与单点登录
title: 基于SpringBoot+Redis的Session共享与单点登录 date: 2019-07-23 02:55:52 categories: 架构 author: mrzhou tag ...
- 【Gym - 101002F】Mountain Scenes(dp)
Mountain Scenes Descriptions 给你一个长度为n的丝带,一个宽w一个高h 的 格子,用丝带去填充格子,这填充后只需要满足至少有一列的丝带长度与其他格子不同即可.丝带可以不全部 ...
- luogu题解 P5022 【旅行】
本人的代码可以说洛谷最简单的了 我的存图方式有些与众不同 a[5000][5000]中第一个下标表示第几个点,第二个表示与点相连的点 虽然比前向星废内存但时间极快,大概是O(n)的. 现在步入正题 6 ...
- golang "[]uint8" to string
关于Uinit8和Byte: The Go Programming Language Specification Numeric types uint8 the set of all unsigned ...