zoukankan      html  css  js  c++  java
  • Ubuntu 18.04使用OpenSSL自签证书(证书支持多IP及多域名,谷歌浏览器无警告)

    前言

    在HTTPS数据传输的过程中,需要用SSL/TLS对数据进行加密和解密,以保证网络传输过程中数据的机密性。HTTPS协议可以大致分为两个部分:其一是协商密钥,首先当Client向Web Server发起请求时,Web Server向Client返回一个包含Server端公钥的证书,然后Client验证该证书的合法性并生成一个随机密钥,接着使用该证书对生成的随机密钥进行非对称加密后发送回Web Server,最后Web Server使用私钥进行解密后获取Client生成的随机密钥;其二是加密通信,Web Server与Client端采用随机密钥进行对称加解密进行通信。HTTPS通信流程图如下,引用于Leon_hy的博客。证书一般由第三方CA进行签发,自签证书将不被浏览器信任,会弹出连接不安全的小窗。本文介绍了Ubuntu 18.04使用OpenSSL自建CA且签发证书的流程,并成功获取谷歌等浏览器的信任。

    环境准备

    1. OpenSSL依赖安装

    $ sudo apt-get install -y openssl libssl-dev

    2. 创建证书保存目录及相关文件

    需要注意的是,以下除了certificate文件夹外,命名必须与/usr/local/ssl/openssl.cnf中的对应名称保持一致,以下均采用默认值

    $ cd ~
    $ mkdir certificate && cd certificate
    $ mkdir demoCA && cd demoCA
    $ mkdir private newcerts
    $ touch index.txt
    $ echo '01' > serial

    自建CA

    1. 生成根密钥

    需要注意的是,此处的密钥名必须与/usr/local/ssl/openssl.cnf中的名称保持一致,默认为cakey.pem

    $ cd private
    $ openssl genrsa -out cakey.pem 2048

    2. 生成根CA证书

    $ openssl req -new -x509 -days 3650 -key cakey.pem -out cacert.pem

    随后按照指引填写根CA证书的相关信息,其中填写内容不做要求(特别指出Common Name此处为根证书颁发机构,命名建议为XX Root CA)

    3. 将根证书移动到demoCA文件夹下

    $ cd .. && mv ./private/cacert.pem ./

    添加信任

    下面介绍两种证书验证场景下,添加信任的方式

    1. Google浏览器(火狐浏览器类似)

    设置->隐私设置和安全性->管理证书->导入->下一步->浏览

    注意此处谷歌浏览器默认导入证书后缀为crt,可以选择所有文件后导入cacert.pem文件到受信任的根证书颁发机构并确认

    2. OpenSSL默认证书验证文件(调用OpenSSL库验证证书合法性的应用将使用该文件如curl等,注意在Ubuntu其他版本中ca-certificates.crt文件可能又叫做ca-bundle.crt)

    $ sudo sh -c "cat cacert.pem >> /etc/ssl/certs/ca-certificates.crt"

    颁发证书

    1. 切换出demoCA文件夹,到certificate文件夹

    $ cd ~/certificate

    2. 创建custom.ext文件,添加多IP配置,文件内容如下(如果需要配置多DNS域名解析,可以在[ SubjectAlternativeName ]下添加DNS.1 = www.XXX.com或者正则匹配式*.XXX.com)

     

     3. 创建私钥

    $ openssl genrsa -out custom.key 2048

    4. 创建证书请求文件

    $ openssl req -new -key custom.key -out custom.csr

    随后按照指引填写证书的相关信息,填写内容除了Common Name,其余部分尽量与根证书保持一致(Common Name内容不做要求)

    5. 签发证书

    $ openssl ca -in custom.csr -extfile custom.ext -days 365 -out custom.crt

    签发后的证书连同私钥可以供Web Server使用

    测试

    1. google浏览器测试结果

    2. 火狐浏览器测试结果

  • 相关阅读:
    leetcode 155. Min Stack 、232. Implement Queue using Stacks 、225. Implement Stack using Queues
    leetcode 557. Reverse Words in a String III 、151. Reverse Words in a String
    leetcode 153. Find Minimum in Rotated Sorted Array 、154. Find Minimum in Rotated Sorted Array II 、33. Search in Rotated Sorted Array 、81. Search in Rotated Sorted Array II 、704. Binary Search
    leetcode 344. Reverse String 、541. Reverse String II 、796. Rotate String
    leetcode 162. Find Peak Element
    leetcode 88. Merge Sorted Array
    leetcode 74. Search a 2D Matrix 、240. Search a 2D Matrix II
    Android的API版本和名称对应关系
    spring 定时任务执行两次解决办法
    解析字符串为泛型的方法
  • 原文地址:https://www.cnblogs.com/pcxie/p/12900666.html
Copyright © 2011-2022 走看看