前言

在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 '' > serial

自建CA

1. 生成根密钥

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

$ cd private
$ openssl genrsa -out cakey.pem

2. 生成根CA证书

$ openssl req -new -x509 -days  -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 

4. 创建证书请求文件

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

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

5. 签发证书

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

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

测试

1. google浏览器测试结果

2. 火狐浏览器测试结果

Ubuntu 18.04使用OpenSSL自签证书(证书支持多IP及多域名,谷歌浏览器无警告)的更多相关文章

  1. Ubuntu 18.04 LTS 常用软件安装杂记

    之前个人笔记本装的是 Linux Mint,用了一段时间但是体验不佳,所以打算换成 Ubuntu .作为一个 Linux 小白,当时配置一些软件环境费了不少时间.这次打算简单记录下,和大家分享一下我的 ...

  2. Ubuntu 18.04 Server 设置静态IP

    一.背景 Netplan是Ubuntu 17.10中引入的一种新的命令行网络配置实用程序,用于在Ubuntu系统中轻松管理和配置网络设置.它允许您使用YAML抽象来配置网络接口.它可与NetworkM ...

  3. Ubuntu 18.04 初始化(server版本 )

    系统安装 ubuntu 18.04 英文版,创建个人用户 初始系统 a.修改ip shell> vim /etc/network/interfaces auto ens33 iface ens3 ...

  4. Ubuntu 18.04安装MongoDB 4.0(社区版)

    Ubuntu 18.04(虚拟机VirtualBox上),MongoDB 4.0, 听室友说,23点有世界杯决赛呢!可是,孤要写博文的啊!以记录这忙乱的下午和晚间成功安装了一个软件到Linux上.—— ...

  5. 在ubuntu 18.04下,无线网卡无驱动,连不上wifi,显示wifi没有适配器的解决方法

    近来因为做东西要用到linux环境,所以自己的笔记本在win10的系统上又安装了ubuntu 18.04版本的双系统,但是安装好以后,没有无线网卡的驱动,显示wifi没有适配器等字样,很纠结,前后研究 ...

  6. Ubuntu 18.04 安装ROS 配置环境 没有那个文件或目录的解决办法

    Ubuntu 18.04版本,在安装ROS时运行  source ~/.bashrc 命令时出现没有那个文件夹或目录 或 No such file or directory的错误 在经过一番查询后发现 ...

  7. 加密通信软件Signal 2.92版本编译安装折腾手记(Ubuntu 18.04)

    加密通信软件Signal 2.92版本编译安装折腾手记(Ubuntu 18.04) 前言 加密通信软件Signal是开源的,安全性很高,号称斯诺登也推荐大家使用.既然这么好,那必然会有不少人去尝试复制 ...

  8. WSL Ubuntu 18.04 LTS + VS Code

    WSL Ubuntu 18.04 LTS + VS Code ​ WSL(Windows Subsystem for Linux)使得Windows用户能够在Windows系统上使用原生的Linux环 ...

  9. 基于Ubuntu 18.04.5 LTS 部署Ceph集群测试及Ceph RDB的使用。

    1.ceph简介 Ceph在一个统一的系统中独特地提供对象.块和文件存储 1.1 ceph官网架构图 1.2 架构解释   CEPH 对象存储 CEPH 块设备 CEPH 文件系统 RESTful 接 ...

随机推荐

  1. 基于Neo4j的个性化Pagerank算法文章推荐系统实践

    新版的Neo4j图形算法库(algo)中增加了个性化Pagerank的支持,我一直想找个有意思的应用来验证一下此算法效果.最近我看Peter Lofgren的一篇论文<高效个性化Pagerank ...

  2. Scrapy爬虫框架(1)--安装配置与常用命令

    安装与配置 Scrapy有几个安装依赖,一般来说可以直接pip install scrapy,这个过程会自动下载安装其他几个依赖. 上述安装方法不成功,则需要手动安装依赖包 步骤 安装 lxmlpip ...

  3. curl请求本地域名问题

    curl在本地虚拟机上请求本地接口时候,出现域名解析问题,换为ip即可,可用curl_error() 或者curl_errno来调试: vue单个文件在引入时候自己的逻辑js文件一定要放在html后引 ...

  4. mysql错误代码对照表较完整

    mysql错误代码对照表较完整 mysql_errno() From: http://blog.csdn.net/aidenliu/article/details/5925604 mysql错误代码对 ...

  5. mysql闪回工具--binlog2sql实践

    DBA或开发人员,有时会误删或者误更新数据,如果是线上环境并且影响较大,就需要能快速回滚.传统恢复方法是利用备份重搭实例,再应用去除错误sql后的binlog来恢复数据.此法费时费力,甚至需要停机维护 ...

  6. 【已解决】React项目中按需引入ant-design报错TypeError: injectBabelPlugin is not a function

    react项目中ant-design按需加载,使用react-app-rewired的时候报错 运行npm start或者yarn start报如下错误: TypeError: injectBabel ...

  7. ES6中Fetch的封装及使用,炒鸡简单~

    之前写过一篇<ajax.axios.fetch之间的详细区别以及优缺点> 戳这里 1.封装 (http.js) class Ajax { get(url) { return new Pro ...

  8. CodeForces - 1176A Divide it! (模拟+分类处理)

    You are given an integer nn. You can perform any of the following operations with this number an arb ...

  9. 图论--最短路--SPFA

    SPFA算法(shortest path faster algorithm)算法是西南交通大学段凡丁于1994年发表的,它在Bellman-ford算法的基础上进行了改进,使其在能够处理待负权图的单元 ...

  10. bzoj 4152[AMPPZ2014]The Captain

    bzoj 4152[AMPPZ2014]The Captain 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点走到n号点的最小费用. ...