HTTPS静态服务搭建过程详解
HTTPS服务对于一个前端开发者来说是一个天天打招呼的老伙计了,但是之前我跟HTTPS打交道的场景一直是抓包,自己没有亲自搭建过HTTPS服务,对HTTPS的底层知识也是一知半解。最近正好遇到一个用户场景,页面需要调起手机的摄像头,这就要求页面服务必须是HTTPS的,所以就尝试搭建了HTTPS的静态服务,过程挺曲折的,所以总结一下分享给大家,希望能给看过本文的朋友一点帮助,提高工作效率。
本文主要讲三个点:HTTPS基本原理、证书的获取和httpd的https配置。
HTTPS基本原理
HTTPS = HTTP + TSL(transport layer security)在应用层和传输层之间添加了一个会话层,会话层采用SSL协议,完成数据的加密、身份认证、数据完整性校验。如下图所示:

要完成以上功能,TLS的连接在TCP连接的基础之上,需要增加握手次数,如下图所示:

总结一下,HTTPS使用的过程中,主要是需要一个认证中心签名的证书,用该证书证明服务端返回的公钥是可信的,然后用该公钥加密浏览器端生成的对称密钥,服务端用自己私钥解密得到浏览器发送的对称密钥,然后浏览器和服务端通过对称密码进行加密通信。因此,搭建HTTPS服务首先要从认证中心申请到签名证书。
证书的获取
由于正规的证书申请,CA机构是要收费的,所以测试过程中我们需要自建CA来颁发证书。
1.自建CA
利用openssl包可以创建CA,前提是需要openssl.conf的要求,创建自建CA所需的文件和目录,具体可以参见相关文章。这里主要指出几个必要的文件和目录:

(1)创建CA私钥
cd CA_PATH #CA_PATH为demoCA的上级目录,因为配置文件中CA默认的私钥路径是./demoCA/private/cakey.pem,所以一定要在该目录执行命令,否则会报错
openssl genrsa -out ./demoCA/private/cakey.pem 2048
(2)创建CA证书申请
openssl req -new -in ./demoCA/private/cakey.pem -days -out ./demoCA/cacsr.pem
申请的过程中需要输入用户信息,如Country Name,Organization Name,Email Address等,注意自己填写的信息。
(3)创建自签证书
openssl x509 -req -in ./demoCA/cacsr.pem -out ./demoCA/cacert.pem -signkey ./demoCA/private/cakey.pem -days 3650
2. 用户申请证书
在任意机器或路径下创建用户私钥
(1)创建用户私钥
openssl genrsa -out userkey.pem 2048
(2)创建用户证书申请
openssl req -new -in userkey.pem -days 365 -out usercsr.pem
同时在当前目录下产生一个privkey.pem文件。
(3)CA签名
需要CA签名的话,就需要将用户申请文件usercsr.pem拷贝到CA所在的机器上,现在把用户的文件放置在与demoCA同级的demoUser目录中。CA默认的私钥路径是./demoCA/private/cakey.pem,因此仍需要切换到./demoCA的上级目录。
cd CA_PATH #CA_PATH为demoCA的上级目录,因为配置文件中CA默认的私钥路径是./demoCA/private/cakey.pem,所以一定要在该目录执行命令,否则会报错
openssl ca -in ./demoUser/usercsr.pem -out ./demoUser/usercrt.pem
httpd的https配置
经过以上两步的操作,我们拿到了用户证书user.crt和用户密钥userkey.pem,接下来就要在httpd的配置文件中配置https。
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot /www/example.com/htdocs
SSLengine on
SSLProtocol all -SSLv3
SSLcertificatefile USER_CRT_PATH/usercrt.pem
SSLcertificatekeyfile USER_KEY_PATH/privkey.pem
</VirtualHost>
HTTPS静态服务搭建过程详解的更多相关文章
- Memcached集群/分布式/高可用 及 Magent缓存代理搭建过程 详解
当网站访问量达到一定时,如何做Memcached集群,又如何高可用,是接下来要讨论的问题. 有这么一段文字来描述“Memcached集群” Memcached如何处理容错的? 不处理!:) 在memc ...
- LAMP 系统服务搭建过程详解
LAMP 架构在企业里用得非常广泛,目前很多电商公司.游戏公司.移动互联网公司大多都采用这种架构.LAMP指的是Linux.Apache.MySQL.PHP.下面记录了 LAMP 架构系统服务的搭建过 ...
- Jekyll搭建过程详解
原先博客用Jekyll搭建在Github上,近来访问缓慢,而且markdown不太方便写,故决定在博客园安个新家. 文章见Github博客: 搭建过程:http://wuxichen.github.i ...
- LNMP系统服务搭建过程详解
和LAMP不同的是LNMP中的N指的是Nginx(类似于Apache的一种web服务软件)其他都一样.目前这种环境应用的也是非常之多.Nginx设计的初衷是提供一种快速高效多并发的web服务软件.在静 ...
- 转载:HTTPS证书的产生过程详解
1.RSA身份验证的隐患 身份验证和密钥协商是TLS的基础功能,要求的前提是合法的服务器掌握着对应的私钥.但RSA算法无法确保服务器身份的合法性,因为公钥并不包含服务器的信息,存在安全隐患: 客 ...
- k8s集群搭建过程详解
准备工作 安装CentOS7虚拟机 略 安装Docker 略 关闭CentOS7自带的防火墙服务 systemctl disable firewalld systemctl stop firewall ...
- Nacos集群搭建过程详解
Nacos的单节点,也就是我们最开始使用的standalone模式,配置的数据是默认存储到内嵌的数据库derby中. 如果我们要搭建集群的话,那么肯定是不能用内嵌的数据库,不然数据无法共享.集群搭建的 ...
- SSH框架搭建过程详解
Spring.Struts2.Hibernate框架: 具体三大框架的知识以前的文章写过,在这里整合 Spring框架知识:http://www.cnblogs.com/xuyiqing/catego ...
- vue-cli3.0 脚手架搭建项目的过程详解
1.安装vue-cli 3.0 ? 1 2 3 npm install -g @vue/cli # or yarn global add @vue/cli 安装成功后查看版本:vue -V(大写的V) ...
随机推荐
- Python爬虫番外篇之关于登录
常见的登录方式有以下两种: 查看登录页面,csrf,cookie;授权:cookie 直接发送post请求,获取cookie 上面只是简单的描述,下面是详细的针对两种登录方式的时候爬虫的处理方法 第一 ...
- 用户体验 | 寻找成套的 App SDK 服务
前言 对于开发者来说,三方 SDK 这个词已经是一个不需要任何解释的词语了,然而我想面对琳琅满目的 SDK 产品,大家都会纠结如何选择.那么选择一个 SDK 需要注意哪些问题呢? SDK 的 稳定易用 ...
- Log4net快速配置使用指南。(快速搭建log4net日志平台手册)
每做一个新项目,都会用到log4net,但总是忘记如何快速配置.有时在网上搜半天也找不到好的模板,大都在介绍参数的使用,在此做下总结,争取下次用时仅10分钟就可搭建好log4net. 直接上介绍的步骤 ...
- java.lang.NoSuchMethodError:android.content.Context.getDrawable
今天在开发的时候,这个代码在源码中是可以看到的,但是在android 4.3手机上面会报错,具体错误信息和代码如下: setBackgroundDrawable(context.getDrawable ...
- shader之半兰伯特漫反射
看很多人实现shader都用插件shader force,那我还学shader干X!!!??? 好了,废话不多说,学习shader去.... 漫反射在shader里算是最基础的知识了.入手shader ...
- shell 变量的使用
变量定义 name="xiaoming"; age=12: 变量名和等号之间不能有空格,否则会报错,同时变量名的命名和其他语言的命名规则基本一样 首个字符必须为字母(a-z,A-Z ...
- shell 脚本编程之特殊变量
$0 当前脚本的文件名$n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2.$# 传递给脚本或函数的参数个数.$* 传递给脚本或函数的所有参数.$@ ...
- YUM安装东西提示PYCURL ERROR 6 - "Couldn't错误的解决办法
执行yum install命令时提示PYCURL ERROR 6 - "Couldn't resolve host 错误,原来是dns设置出错,具体错误代码: Loaded plugins ...
- CSS常见英语单词属性一览
这些是css中常会用到的一些英文单词,大家可以多看看,多使用就会容易记得了. color : #999999; /*文字颜色*/ font-family : 宋体,sans-serif; /*文字字体 ...
- noip普及组2004 FBI树
FBI树 描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含" ...