zoukankan      html  css  js  c++  java
  • HTTPS静态服务搭建过程详解

    HTTPS服务对于一个前端开发者来说是一个天天打招呼的老伙计了,但是之前我跟HTTPS打交道的场景一直是抓包,自己没有亲自搭建过HTTPS服务,对HTTPS的底层知识也是一知半解。最近正好遇到一个用户场景,页面需要调起手机的摄像头,这就要求页面服务必须是HTTPS的,所以就尝试搭建了HTTPS的静态服务,过程挺曲折的,所以总结一下分享给大家,希望能给看过本文的朋友一点帮助,提高工作效率。

    本文主要讲三个点:HTTPS基本原理证书的获取httpd的https配置

    HTTPS基本原理

    HTTPS = HTTP + TSL(transport layer security)在应用层和传输层之间添加了一个会话层,会话层采用SSL协议,完成数据的加密、身份认证、数据完整性校验。如下图所示:

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

    新增的往返过程可以简单根据下图示意理解。

    总结一下,HTTPS使用的过程中,主要是需要一个认证中心签名的证书,用该证书证明服务端返回的公钥是可信的,然后用该公钥加密浏览器端生成的对称密钥,服务端用自己私钥解密得到浏览器发送的对称密钥,然后浏览器和服务端通过对称密码进行加密通信。因此,搭建HTTPS服务首先要从认证中心申请到签名证书。

    证书的获取

    证书的获取过程是:向证书认证中心—CA提出申请,在CA判明申请者的身份后,为其分配一个公钥,然后CA将该公钥与申请者的身份信息绑在一起,然后用CA的私钥为其加密签名,签名后颁发给申请者。证书中的内容是用户公钥、用户信息、颁发机构、有效期等。分配的公钥可以通过证书请求中的用户私钥来获取。用户想要鉴别证书的真伪,只能用CA的公钥对证书上的签字进行验证。下图是证书获取过程的示意图:

    由于正规的证书申请,CA机构是要收费的,所以测试过程中我们需要自建CA来颁发证书。

    1.自建CA

    利用openssl包可以创建CA,前提是需要openssl.conf的要求,创建自建CA所需的文件和目录,具体可以参见相关文章。这里主要指出几个必要的文件和目录:

    new_certs_dir = $dir/newcerts # 新证书存放位置
    private_key = $dir/private/cakey.pem #CA私钥
    database = $dir/index.txt #证书索引数据库文件
    serial = $dir/serial 颁发证书的序列号

    (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 365 -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。

    (1)确认ssl模块(mod_ssl.so)开启
    (2)设置https相应的虚拟端口配置,默认为443端口
    配置代码如下:
    <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>
    (3)重启httpd即可 
     
  • 相关阅读:
    微信小程序开发框架技术选型
    WebApiThrottle限流框架使用手册
    MicroService 微服务架构模式简述
    .net Core 微服务框架 surging 使用
    C#最佳工具集合:IDE、分析、自动化工具等
    神经网络编程入门
    ABP+AdminLTE+Bootstrap Table aspnetboilerplate 学习
    转 Web用户的身份验证及WebApi权限验证流程的设计和实现
    C# 调用webservice 几种办法(转载)
    C++ sort函数用法
  • 原文地址:https://www.cnblogs.com/wmhuang/p/7516273.html
Copyright © 2011-2022 走看看