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 '' > 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及多域名,谷歌浏览器无警告)的更多相关文章
- Ubuntu 18.04 LTS 常用软件安装杂记
之前个人笔记本装的是 Linux Mint,用了一段时间但是体验不佳,所以打算换成 Ubuntu .作为一个 Linux 小白,当时配置一些软件环境费了不少时间.这次打算简单记录下,和大家分享一下我的 ...
- Ubuntu 18.04 Server 设置静态IP
一.背景 Netplan是Ubuntu 17.10中引入的一种新的命令行网络配置实用程序,用于在Ubuntu系统中轻松管理和配置网络设置.它允许您使用YAML抽象来配置网络接口.它可与NetworkM ...
- Ubuntu 18.04 初始化(server版本 )
系统安装 ubuntu 18.04 英文版,创建个人用户 初始系统 a.修改ip shell> vim /etc/network/interfaces auto ens33 iface ens3 ...
- Ubuntu 18.04安装MongoDB 4.0(社区版)
Ubuntu 18.04(虚拟机VirtualBox上),MongoDB 4.0, 听室友说,23点有世界杯决赛呢!可是,孤要写博文的啊!以记录这忙乱的下午和晚间成功安装了一个软件到Linux上.—— ...
- 在ubuntu 18.04下,无线网卡无驱动,连不上wifi,显示wifi没有适配器的解决方法
近来因为做东西要用到linux环境,所以自己的笔记本在win10的系统上又安装了ubuntu 18.04版本的双系统,但是安装好以后,没有无线网卡的驱动,显示wifi没有适配器等字样,很纠结,前后研究 ...
- Ubuntu 18.04 安装ROS 配置环境 没有那个文件或目录的解决办法
Ubuntu 18.04版本,在安装ROS时运行 source ~/.bashrc 命令时出现没有那个文件夹或目录 或 No such file or directory的错误 在经过一番查询后发现 ...
- 加密通信软件Signal 2.92版本编译安装折腾手记(Ubuntu 18.04)
加密通信软件Signal 2.92版本编译安装折腾手记(Ubuntu 18.04) 前言 加密通信软件Signal是开源的,安全性很高,号称斯诺登也推荐大家使用.既然这么好,那必然会有不少人去尝试复制 ...
- WSL Ubuntu 18.04 LTS + VS Code
WSL Ubuntu 18.04 LTS + VS Code WSL(Windows Subsystem for Linux)使得Windows用户能够在Windows系统上使用原生的Linux环 ...
- 基于Ubuntu 18.04.5 LTS 部署Ceph集群测试及Ceph RDB的使用。
1.ceph简介 Ceph在一个统一的系统中独特地提供对象.块和文件存储 1.1 ceph官网架构图 1.2 架构解释 CEPH 对象存储 CEPH 块设备 CEPH 文件系统 RESTful 接 ...
随机推荐
- BUUOJ [极客大挑战 2019]Secret File
[极客大挑战 2019]Secret File 0X01考点 php的file伪协议读取文件 ?file=php://filter/convert.base64-encode/resource= 0X ...
- SpringBoot与单元测试JUnit的结合
有些人认为,写单元测试就是在浪费时间 ,写完代码,依然还是能够进行测试的.但是,还是建议写单元测试的,可以让你的条理更加清晰,而且当某个功能出现问题时,可能通过单元测试很容易的定位和解决问题.本文主要 ...
- 使用RNN对文本进行分类实践电影评论
本教程在IMDB大型影评数据集 上训练一个循环神经网络进行情感分类. from __future__ import absolute_import, division, print_function, ...
- tp5--数据库查询的常用操作
首先,我们要先明确,我们平时经常使用那些操作,我看了开发手册,主要是连贯操作比较多. 连贯操作有: field, order, limit, page, GROUP, HAVING, cache, 其 ...
- ip的运用
1------获取ip$ip=$_SERVICE['REMOTE_ADDR'];2------根据ip获取主机名gethostbyaddr($ip);3------根据主机名获取IPgethostby ...
- 反向代理负载均衡之haproxy
在上篇安装的nginx的机器环境上将nginx停掉 /usr/local/nginx/sbin/nginx -s stop 在linux-node2上编译安装haproxy作为反向代理服务器 [roo ...
- 在 ubuntu20 上替换原有的源,解决下载软件慢的问题
处理方式 使用命令查看到所有的下载源 sudo gedit /etc/apt/sources.list 使用163的源替换掉原始的源 163:http://mirrors.163.com/ubuntu ...
- latex-列表环境
介绍 latex 主要有三种列表环境,进行罗列的实现, 无序列表 -- itemize 有序列表 -- enumerate 描述列表 -- description 本文进行了一一介绍和演示, 同时添加 ...
- js 之 JSON详解
JSON:JavaScriptObjectNotation JSON是一种语法,用来序列化对象.数组.字符串.布尔值和null. JSON是基于JavaScript的语法,但与之不同 注意事项 JSO ...
- 【Linux常见命令】cp命令
cp - copy files and directories 拷贝文件或目标文件夹,默认不能直接拷贝目录,通过-r参数设置递归复制目录 copy 语法: cp [OPTION]... [-T] SO ...