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. 火狐浏览器测试结果

  • 相关阅读:
    动态类型
    unlink与close关系
    Google 历年笔试面试30题
    UNIX网络编程 卷2 源代码使用
    centos安装telnet
    python中安装第三方模块
    Linux平台 Oracle 18c RAC安装Part1:准备工作
    RHEL7 配置iSCSI模拟环境
    Solaris 10主机名和IP地址步骤
    设置sqlplus不显示除查询结果外的信息
  • 原文地址:https://www.cnblogs.com/pcxie/p/12900666.html
Copyright © 2011-2022 走看看