原博客链接

本文非原创,系浏览各博客后结合自身使用的一个总结,方便回顾。

前情提要

通俗理解SSL/TLS协议区别与原理
数字签名是什么

什么是x509证书链

  • x509证书一般会用到三类文件,key,csr,crt。
  • key是私用密钥,openssl格式,通常是rsa算法。
  • csr是证书请求文件,用于申请证书。在制作csr文件的时候,必须使用自己的私钥来签署申请,还可以设定一个密钥。
  • crt是CA认证后的证书文件(windows下面的csr,其实是crt),签署人用自己的key给你签署的凭证。

概念

  • 根证书 生成服务器证书,客户端证书的基础。自签名。
  • 服务器证书 由根证书签发。配置在服务器上。
  • 客户端证书 由根证书签发。配置在服务器上,并发送给客户,让客户安装在浏览器里。

(把根证书安装到浏览器的受信CA中,访问服务器时就不会出警告了。)

首先要有一个CA根证书,然后用CA根证书来签发用户证书。用户进行证书申请:一般先生成一个私钥,然后用私钥生成证书请求(证书请求里应含有公钥信息),再利用证书服务器的CA根证书来签发证书。

步骤

自签名CA根证书

1、/root/ca目录下创建4个子目录:

  • newcerts:存放CA签署过的数字证书。
  • private:存放CA的私钥。
  • conf:存放一些简化参数用的配置文件。
  • server:存放服务器证书文件。

2、制作ca.key 私钥

openssl genrsa -out /root/ca/private/ca.key 2048

3、生成pem格式的根证书

openssl req -x509 -new -nodes \
-key /root/ca/private/ca.key \
-sha256 -days 1024 \
-out /root/ca/private/ca.pem

接下来提示将如下显示:
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:GuangDong
Locality Name (eg, city) [Default City]:ShenZhen
Organization Name (eg, company) [Default Company Ltd]:Fatri
Organizational Unit Name (eg, section) []:Test
Common Name (eg, your name or your server’s hostname) []: *.fatri.cn
Email Address []:a@fatri.cn

4、.pem转化为.crt(用于浏览器信任)

openssl x509 -outform der -in /root/ca/private/ca.pem -out /root/ca/private/ca.crt

签发服务器证书(客户端证书同理)

1、创建文件ca.conf

[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn[dn]
C = CN
ST = GuangDong
L = ShenZhen
O = Fatri
OU = Test
emailAddress = a@fatri.cn
CN = *.fatri.cn

2、创建文件v3.ext

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names[alt_names]
DNS.1 = *.fatri.cn
DNS.2 = localhost
IP.1 = 172.28.2.105
IP.2 = 172.28.2.107

3、生成服务端证书签名请求,同时生成服务端私钥(nginx用)

openssl req -new -sha256 -nodes \
-out /root/ca/server/server.csr \
-newkey rsa:2048 -keyout /root/ca/server/server.key \
-config /root/ca/conf/ca.cnf

4、用ca私钥以ca的名义(ca.pem)给网站证书签名,加上v3.ext中的配置

openssl x509 -req -in /root/ca/server/server.csr \
-CA /root/ca/private/ca.pem \
-CAkey /root/ca/private/ca.key \
-CAcreateserial -out /root/ca/server/server.crt -days 1800 -sha256 -extfile /root/ca/conf/v3.ext

至此证书生成完毕!
接下来是使用流程。

服务端Nginx配置SSL

1、启动Nginx容器

docker run -d --name nginx-test --restart always\
-p 81:8080 -p 444:443 \
-v /usr/local/nginx/nginx.conf:/etc/nginx/nginx.conf:ro  \
-v /root/ca:/root/ca \
nginx:1.17.3

解释:
-d:后台运行 --name:容器名 --restart:重启设置
-p:端口映射(宿主机端口:容器内端口)
-v:数据挂载(容器内目录挂载到宿主机, ro将容器内配置文件设为只读模式, 只能在宿主机修改nginx配置)

2、打开防火墙端口81、444

firewall-cmd --add-port 81/tcp --permanent --zone=public
firewall-cmd --add-port 444/tcp --permanent --zone=public
firewal-cmd --reload

3、配置nginx.conf, 为了开发方便同时开启了http和https的访问,如果局域网统一配置了域名,不需要更改主机host就可以关闭8080端口或者将其重定向至443。

worker_processes  auto;events {worker_connections  1024;
}http {include             mime.types;default_type        application/octet-stream;sendfile            on;proxy_set_header X-Forward-For  $proxy_add_x_forwarded_for;# 请求主机头字段,否则为服务器名称proxy_set_header Host           $host;# 客户端ip地址proxy_set_header X-Real-IP      $remote_addr;# 包含请求参数的原始URI,不包含主机名proxy_set_header Request-Url    $request_uri;# 配置共享会话缓存大小,视站点访问情况设定ssl_session_cache   shared:SSL:10m;# 配置会话超时时间ssl_session_timeout 10m; map $http_upgrade $connection_upgrade {default upgrade;''      close;}upstream shadow {server 172.20.0.104:8080 weight=1;}upstream web {server 172.20.0.109:8080 weight=1;}server {listen       8080;listen       443 ssl;server_name *.fatri.cn;ssl_certificate /root/ca/server/server.crt;ssl_certificate_key /root/ca/server/server.key;# 设置长连接keepalive_timeout   70;# 以下两项不建议显示设定# ssl_protocols  SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2; # 定义算法        # ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;         # 优先采取服务器算法ssl_prefer_server_ciphers   on;location / {proxy_pass http://web;}location /api/v1/ws {proxy_pass http://shadow; proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $connection_upgrade;}}
}

nginx重定向http请求配置(未测试)

server {listen 80;server_name *.fatri.cn;return 301 https://$host$request_uri;
}server {listen 443 ssl;server_name  example.org;root /etc/nginx/wwwroot/;charset utf-8;ssl_certificate /etc/nginx/ssl/example.org.bundle.crt;ssl_certificate_key /etc/nginx/ssl/example.org.key;# ...
}

4、修改Nginx配置文件nginx.conf, 修改后重启容器使配置生效

docker restart nginx-test

由于不是买的官方CA证书,所以需要让浏览器信任CA。

客户端添加信任证书

双击根ca.crt导入证书(也可从控制面板搜索管理系统证书导入)

选择受信任的根证书颁发机构

配置主机映射

# 1、修改host
win10到C:\Windows\System32\drivers\etc目录下修改host(可先用文本编辑保存到桌面,在修改后缀名拖回文件夹覆盖原文件)
mac直接命令行`sodo vi /etc/hosts`# 2、添加映射
172.28.2.105   dev.fatri.cn# 3、刷新配置
win10还需进入终端输入`ipconfig/flushdns`刷新配置
mac应该直接修改后就生效

openssl自签名CA证书相关推荐

  1. openssl自签名ca证书,以及签发服务端/客户端证书

    网上由很多,但是感觉操作比较复杂,有些签发的证书不可用.现在介绍简单方法.假设已经安装了openssl,已有sudo权限.已经建立路径:/ope/ca,所有操作都在此路径下进行. 1. 准备工作,由于 ...

  2. 数字证书连接服务器异常,连接时Socket.io + SSL +自签名CA证书出现错误

    我正在运行使用使用自签名CA证书创建的证书的https服务器. 现在,我想将Socket.io客户端连接到连接到https服务器的Socket.io服务器.不幸的是,我得到一个错误,告诉我: Erro ...

  3. OpenSSL创建生成CA证书、服务器、客户端证书及密钥

    使用OpenSSL创建生成CA证书.服务器.客户端证书及密钥 目录 使用OpenSSL创建生成CA证书.服务器.客户端证书及密钥 (一)生成CA证书 (二)生成服务器证书 (三)生成客户端证书 (四) ...

  4. rhel6.3下使用openssl来生成CA证书并颁发证书实例解析

    一.配置OPENSSL [root@test1 /]# rpm -qa|grep openssl openssl-1.0.0-20.el6_2.5.i686 [root@test1 /]# cd /e ...

  5. PKI详解与openssl实现私有CA证书签发

    加密解密技术基础 在看这篇文章之前,首先需要有加密解密的技术基础: 安全目标: 保密性:确保通信信息不被任何无关的人看到 完整性:实现通信双方的报文不丢失.数据完整性.系统完整性 可用性:通信任何一方 ...

  6. rhel6.3下使用openssl来生成CA证书并颁发证书实例解

    •     一.配置OPENSSL [root@test1 /]#rpm -qa|grep openssl openssl-1.0.0-20.el6_2.5.i686 [root@test1 /]# ...

  7. The Things Network LoRaWAN Stack V3 学习笔记 2.1.2 客户端导入自签名 CA 证书

    前言 TTN 的开发环境使用了自签名证书,浏览器端在进行OAUTH登录时会弹出警告,当然我们可以无视警告强制跳转.但本地客户端 CLI 也需要进行 SSL 交互,因此本地也需要添加 CA 证书. 否则 ...

  8. linux 对称加密命令,linux安全和加密篇(三)—openssl工具和CA证书

    OpenSSL:开源项目 三个组件: openssl: 多用途的命令行工具,包openssl libcrypto: 加密算法库,包openssl-libs[root@centos7-4 data]# ...

  9. Android中使用Webview SSL 自签名CA证书安全校验方案

    前言: 因为我们的项目是Android + H5,之前的做法是把H5所需要的资源和html下载到本地这样证书校验不会走系统浏览器层只需要项目中预埋根证书就可以了,但是如果用webview加载线上的域名 ...

  10. openssl私有CA证书签发与单双向认证

    什么是CA? CA是数字认证中心的简称.指的是发放.管理.废除数字证书的机构. CA的作用: 检查证书持有者身份的合法性.签发证书(在证书上签字),以防证书被伪造或篡改,以及对证书和密钥进行管理. 建 ...

最新文章

  1. P1223 排队接水
  2. cocos2dxFlappyBird开发总结二:开发环境介绍
  3. 圆括号匹配c语言代码,求救!!一道关于表达式圆括号匹配的经典题目
  4. python 数据库查询结果邮件提醒_python读取postgresql数据库并发送相关提醒邮件
  5. Spring启动的流程
  6. wpf 如何实现窗口浮动_如何实现工作表数据与UserForm窗口的交互,显示第一条记录...
  7. mysql有没有mssql执行计划_MSSQL优化执行计划
  8. oracle processes 的大小,Oracle中sessions和processes的大小关系(10g和11g不同)
  9. 怎么进入本地组策略编辑器
  10. [渝粤教育] 西南科技大学 财务会计 在线考试复习资料(3)
  11. Linux系统 应急响应自动化检测工具 GScan ——使用教程
  12. 【模型检测学习笔记】8:无限字上ω正则LT性质的验证
  13. SIP音调通话调研结果
  14. WSL2中 使用jupyter lab
  15. abaqus python 读取文件_ABAQUS Command 如何调用或执行 Python 脚本文件
  16. 微信程序开发小程序交互
  17. 《袁老师访谈录》第一期|吴恩柏教授/香港科大协理副校长:【成功,说到底要非常专注!】...
  18. 关于html中文显示乱码
  19. 基于Python实现的二手车价格预测
  20. Java练习题——抽象类、方法以及接口

热门文章

  1. 拜年神器php,Biu神器安卓版
  2. 回首2017,展望2018
  3. MYSQL启动失败,Can‘t create test file
  4. 土木工程计算机设计考试科目一模拟试题,科目一电脑模拟考试,原来这么简单,看完这个科一不用愁!...
  5. 微信公众号开发---生成带参二维码
  6. 新型博客网站的运营要素分析
  7. python 爬虫3 新浪微博 爬虫 实战
  8. 从新一期技术雷达看技术领域最新趋势
  9. ibm虚拟化 用的服务器品牌,浅析IBM i虚拟化技术
  10. 一名大专同学的四个问题