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 接 ...
随机推荐
- [转]ThinkCMF框架任意内容包含漏洞分析复现
0x00 简介 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建.ThinkCMF提出灵活的应用机制,框架自身提供基础的管理功能,而开发者可以 ...
- eclipse git 文件状态 及git分支的创建与合并与删除
eclipse里面Git文件状态及图标展示 EGit会出现如下图标,其对应状态及意义如下: 1)忽略[ ignored ]:仓库认为该文件不存在(如bin目录,不需要关注).通过右键Te ...
- Jmeter系列(2)- Jmeter工具介绍、Jmeter安装目录介绍、Jmeter面板介绍
如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html Jmeter支持哪些测试场景? Jme ...
- MySql的数据库方言问题
在使用hibernate将po(一般对象类)转化为数据库表时,如果mysql的版本为5.0之前的,则方言写为:<property name="dialect">org. ...
- Java 理解类加载过程 -- 自定义加载器
类加载器可以看下我的收藏: https://www.cnblogs.com/dongguacai/p/5879931.html 现在准备一个字节码文件: 自定义加载器: package com.xzl ...
- NTSTATUS code 和 Windows 系统错误码 的对应关系
出处:https://github.com/dokan-dev/dokany/blob/master/dokan/ntstatus.i case EPT_S_CANT_CREATE: return E ...
- JAVA企业级应用TOMCAT实战(二)
使用普通用户运行 使用普通用户来部署服务是比较安全的做法 [root@tomcat application]# useradd -u tomcat [root@tomcat application]# ...
- asList和ArrayList不得不说的故事
目录 简介 创建ArrayList UnsupportedOperationException asList 转换 总结 asList和ArrayList不得不说的故事 简介 提到集合类,ArrayL ...
- js之用IndexOf返回指定字符串的次数
代码 var Str = "strs,strs,stras,str,strs,strs"; var subStr ="strs" ; var count = 0 ...
- CF1285 --- Dr. Evil Underscores
CF1285 --- Dr. Evil Underscores 题干 Today as a friendship gift, Bakry gave Badawy \(n\) integers \(a_ ...