网络知识详解之:CA证书制作实战(Nginx数字证书实战)

news2024/11/17 1:27:34

网络知识详解之:CA证书制作实战

计算机网络相关知识体系详解

  • 网络知识详解之:TCP连接原理详解
  • 网络知识详解之:HTTP协议基础
  • 网络知识详解之:HTTPS通信原理剖析(对称、非对称加密、数字签名、数字证书)
  • 网络知识详解之:CA证书制作实战(Nginx数字证书实战)
  • 网络知识详解之:网络攻击与安全防护

    文章目录

    • 网络知识详解之:CA证书制作实战
      • 需求
      • OpenSSL
      • 过程
      • 颁发证书
        • (1) 修改配置
        • (2) 生成根密钥
        • (3)生成根证书
        • (4) 为我们的Nginx服务器生成SSL密钥
        • (5)为nginx生成证书签署请求
        • (6) 私有CA根据请求来签署证书
      • 使用 SSL证书
        • (1) Nginx 使用 SSL 证书
        • (2) 启动Nginx
        • (3) 访问测试
        • (4) 添加证书
        • (5)访问测试

需求

自建CA 颁发证书

使用自签名证书来构建安全网络,所谓自签名证书,就是自己扮演 CA 机构,自己给自己的服务器颁发证书。

OpenSSL

在这里插入图片描述

OpenSSL是一个以C语言编写现了SSL与TLS协议的开源的软件库包,应用程序可以使用这个包来进行安全通信,避免窃听,同时确认另一端连线者的身份。这个包广泛被应用在互联网的网页服务器上。OpenSSL支持Linux、Windows、BSD(Unix的衍生系统)、Mac等平台,这使得OpenSSL具有广泛的适用性。

OpenSSL整个软件包大概可以分成三个主要的功能部分:

  • 加密算法库
    • 对称加密算法:
    • 非对称加密算法
    • 信息摘要算法
  • SSL协议库
    • OpenSSL实现了SSL协议的SSLv2和SSLv3,支持了其中绝大部分算法协
    • OpenSSL也实现了TLSv1.0+
  • 应用程序
    • 多功能的命令行工具,可以实现加密解密、密钥生成、密钥和证书管理、自建CA和签名等功能

过程

  1. CA生成根密钥
  2. CA生成根证书
  3. Nginx生成私钥
  4. Nginx申请证书
  5. CA签发
  6. Nginx安装证书,配置

颁发证书

默认情况下Linux操作系统已经内置安装了OpenSSL,可以通过 openssl version 查看版本号

在这里插入图片描述

但是在使用前,需要注意下当前OpenSSL的库的版本,因为版本1.0.1是一个很重要的风水岭版本,1.0.1是第一个支持TLS1.1和1.2的版本。

(1) 修改配置

在CA目录下创建两个初始文件,维护序列号。通过CA机构签发的每个证书都有一个唯一的序列号。

cd /etc/pki/CA
touch index.txt serial
echo 01 > serial

(2) 生成根密钥

表示的CA机构的私钥,CA结构签发的每一个证书都要通过自己的私钥进行签名

cd /etc/pki/CA
#生成一个2048位的密钥
openssl genrsa -out private/cakey.pem 2048

在这里插入图片描述

(3)生成根证书

使用req命令生成自签证书

  • -new:表示新的申请
  • -x509:表示生成自签证书
  • -key:指定私钥文件
  • -out:保存证书的位置
  • -days:指定证书期限
openssl req -new -x509 -key private/cakey.pem -out cacert.pem

会提示输入一些内容,因为是私有的,所以可以随便输入(之前修改的openssl.cnf会在这里呈现),最好记住能与后面保持一致。上面的自签证书cacert.pem 应该生成在 /etc/pki/CA 下。

在这里插入图片描述

(4) 为我们的Nginx服务器生成SSL密钥

申请SSL证书本质上就是服务器升级支持HTTPS,非对称加密(公钥和私钥)。

以上都是在CA服务器上做的操作,而且只需进行一次,现在转到nginx服务器上执行:

安装Nginx

#1.安装该rpm
rpm -ivh
http://nginx.org/packages/centos/7/noarch/RPMS/nginx-releasecentos-7-0.el7.ngx.noarch.rpm
#安装该rpm后,我们就能在/etc/yum.repos.d/ 目录中看到一个名为
nginx.repo 的文件。

#2.安装完Nginx源后,就可以正式安装Nginx了。
yum install -y nginx

#3.查看所在目录
whereis nginx
cd ./nginx-1.17.8/
# 创建一个ssl的新目录
mkdir ssl
cd ssl
#为我们的nginx web服务器生成ssl密钥
openssl genrsa -out nginx.key 2048

(5)为nginx生成证书签署请求

该过程会生成一个文件,包含了证书相关的信息,但是该文件不是证书,生成证书的请求文件。

该文件需要发送给CA机构,由CA签名后生成一个证书文件。

openssl req -new -key nginx.key -out nginx.csr
...
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:GD
Locality Name (eg, city) []:SZ
Organization Name (eg, company) [Internet Widgits Pty
Ltd]:COMPANY
Organizational Unit Name (eg, section) []:IT_SECTION
Common Name (e.g. server FQDN or YOUR name)
[]:your.domain.com
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
...

同样会提示输入一些内容,其它随便,除了 Commone Name 一定要是你要授予证书的服务器域名或主机名,challenge password不填。

在这里插入图片描述

(6) 私有CA根据请求来签署证书

接下来要把上一步生成的证书请求csr文件,发到CA服务器上,在CA上执行:

openssl ca -in nginx.csr -out nginx.crt

在这里插入图片描述

在这里插入图片描述

上面三个文件中,nginx.crt表示证书,nginx.csr表示请求文件,nginx.key表示私钥

上面签发过程其实默认使用了 -cert cacert.pem -keyfile cakey.pem ,这两个文件就是前两步生成的位于 /etc/pki/CA 下的根密钥和根证书。将生成的crt证书发回nginx服务器使用。

到此我们已经拥有了建立SSL安全连接所需要的所有文件,并且服务器的crt和key都位于配置的目录下,剩下的是如何使用证书的问题。

使用 SSL证书

(1) Nginx 使用 SSL 证书

在本地安装完成证书(在Nginx服务器配置)也就意味着Java Web应用已经完成了从http到https协议的升级

以 Nginx 为例,在 Nginx 中新建ssl文件夹,将生成的crt和key放入其中,配置文件中加入以下代码:

#修改Nginx的配置文件,安装SSL证书
cd /etc/nginx/conf.d
vi default.conf

listen 443 ssl http2;#https协议监听的端口号是443端口,基于http2进行工作的。
ssl_certificate /etc/nginx/ssl/nginx.crt; # 指向 ssl文件夹中的 crt 文件
ssl_certificate_key /etc/nginx/ssl/nginx.key; # 指向ssl 文件夹中的 key 文件
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

实际的配置文件如下:

default.conf

server {
    listen       80;
    server_name  localhost;
		
	listen 443 ssl http2;	
	ssl_certificate /opt/lagou/servers/nginx-1.17.8/ssl/nginx.crt; 
	ssl_certificate_key /opt/lagou/servers/nginx-1.17.8/ssl/nginx.key; 
	ssl_session_timeout 5m;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        root   html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

(2) 启动Nginx

#切换到可执行目录
cd /usr/sbin/
./nginx
#查看启动状态
ps -ef|grep nginx

在这里插入图片描述

(3) 访问测试

curl https://192.168.80.121

但是,我们自己签发的证书,是不受其他服务器信任的,当发起 curl 请求时,会出现以下情况:证书无效或无法验证错误。

在这里插入图片描述

这时候,我们就需要将我们 CA 服务器的根证书导入到这台服务器中。

(4) 添加证书

#安装 ca-certificates package:
yum install ca-certificates

#启用dynamic CA configuration feature:
update-ca-trust force-enable

#将证书文件放到 /etc/pki/ca-trust/source/anchors/ 目录下
mv /etc/pki/CA/cacert.pem /etc/pki/ca-trust/source/anchors/

#执行更新:
update-ca-trust extract

(5)访问测试

curl https://192.168.80.121

可以看到,通过上述配置后,已经可以成功访问nginx了,说明我们利用CA数字证书进行网络通信的方式测试成功!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/186432.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle的学习心得和知识总结(九)|Oracle数据库PL/SQL语言条件选择语句之IF和CASE语句技术详解

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《Oracle Database SQL Language Reference》 2、参考书籍:《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Guid…

[Lua实战]整理Lua中忽略的问题

整理Lua中忽略的问题1.元表metatable和元方法1.1元方法_index可以设置为table1.2.元方法_index可以设置为函数1.3.元方法_index和_newindex实现只读table2.Lua强制GC方法2.1 collectgarbage()3.协程和线程的区别3.1协程coroutine.create()是同步执行,不是并行,只是切了一个上下…

Day874.MySQL索引选择出错问题 -MySQL实战

MySQL索引选择出错问题 Hi,我是阿昌,今天学习记录的是关于MySQL索引选择出错问题的内容。 写 SQL 语句的时候,并没有主动指定使用哪个索引。也就是说,使用哪个索引是由 MySQL 来确定的。 不知道有没有碰到过这种情况&#xff0…

Android开发进阶—invoke反射及其原理解析

反射的概念 反射:Refelection,反射是Java的特征之一,允许运行中的Java程序获取自身信息,并可以操作类或者对象的内部属性通过反射,可以在运行时获得程序或者程序中的每一个类型的成员活成成员的信息程序中的对象一般都是在编译时就确定下来,Java反射机制可以动态地创建对象并且…

含有吲哚基团132557-72-3,2,3,3-三甲基-3H-吲哚-5-磺酸

基础产品数据(Basic Product Data):CAS号:132557-72-3中文名:2,3,3-三甲基-3H-吲哚-5-磺酸,2,3,3-三甲基-3H-吲哚-6-磺酸钾盐英文名:5-Sulfo-2,3,3-trimethyl indolenine sodium salt&#xff0…

Axure原型图设计工具使用记录

Axure原型图设计工具使用记录 Axure快速入门(01) - 面板介绍 https://blog.51cto.com/u_15294985/3007677 Axure快速入门(02) - 入门例子(登录案例) https://developer.aliyun.com/article/1046689 Axu…

03 python 要点(函数+类)

第8章 函数 8.1 定义函数 函数就是执行特定任务的一段代码, 自定义函数的语法格式, 以英文半角冒号结尾. # def: 8.2 调用函数 在定义好函数后,既可调用函数. 8.2.1 使用位置参数调用函数 在调用函数时传递的实参与定义函数时的形参顺序一致,这…

LoongArch上正常使用`pip install`

原创:你在使用loongarch架构操作系统时,是否遇到pip install 安装失败的情况? 刷到这篇文章,大家可添加评论或者私信我,及时满足大家的需求那么,下面讲一下如何配置loongarch架构的pip 仓库及开发原理如何配…

Java集合(五)LinkedList底层扩容源码分析

LinkedList的全面说明: (1)LinkedList底层实现了双向链表和双端队列特点 (2)可以添加任意元素(元素可以重复),包括null. (3)线程不安全,没有实现同步 LinkedList的底…

MicroBlaze系列教程(1):AXI_GPIO的使用

文章目录 @[toc]简介常用函数使用示例参考资料工程下载本文是Xilinx MicroBlaze系列教程的第1篇文章。 简介 AXI GPIO是基于AXI-lite总线的一个通用输入输出IP核,可配置为一个或两个通道,每个通道32位,每一位可以通过SDK动态配置成输入或输出方向,支持中断请求,配合中断控…

计算机网络第三章 传输层

本文部分图片(PPT截图)来自中科大计算机网络top down3.0 目录[TOC]3.1 概述传输层TCP和UDP协议可以在IP协议主机到主机通信的基础上,实现进程到进程之间的通信(利用端口号)真正实现端到端的通信【通过多路复用于解复用…

b站黑马Vue2后台管理项目笔记——(3)用户列表

说明: 此项目中使用的是本地SQL数据库,Vue2。 其他功能请见本人后续的其他相关文章。 本文内容实现的最终效果如下图: 三.用户列表的开发 目标效果: 点击二级菜单——用户列表,在右侧展示用户列表对应的内容&#xf…

羊了个羊,低配纯前端实现,代码开源

各位朋友们大家好,我是克隆窝。 我属实被“羊了个羊”气到了,就是通不过第二关,迫不得已自己弄了个网页版的“鱼了个鱼” 游戏的玩法非常简单,类似 “消消乐”,从一堆方块中找到相同图案的 3 个方块并消除即可。 文末…

火山引擎边缘计算在云边协同方面的探索与实践

作者:杜怀宇近期,由边缘计算产业联盟(ECC)主办的2022边缘计算产业峰会(ECIS2022)以云端直播形式成功举办,峰会以“边云智联 助力行业数字化转型”为主题,汇聚来自全球的商业领袖、国…

JavaScript基础复盘1

JS有三种书写位置,分别为行内,内嵌和外部。 注意,引用外部JS文件,script双标签内部不可以写代码了。 JavaScript输入输出语句 变量 变量的使用 变量再使用时分为两步:1.声明变量 2.赋值 实现用JavaScript接受用户输入…

最近公共祖先

最近公共祖先(Lowest Common Ancestor,LCA) 指两个点的公共祖先中,离根最远/深度最深的 性质: 1.LCA({u})uLCA\left(\left\{u\right\}\right) uLCA({u})u 2.若uuu是vvv的祖先,当且仅当LCA(u,v)uLCA\left(…

[Lua实战]Skynet-1.如何启动(linux环境启动)[开箱可用]

Skynet-如何启动1.依赖环境:可登录&联网的linux(Centos7)系统(可以是虚拟机)2.yum安装依赖库3.git clone skynet项目4.编译skynet4.1有可能遇到的错误(升级gcc到4.9以上即可解决):5.测试运行skynet6.运行结果最近用到了lua,想了解下云风大神的skynet,在网上看了半天也没入门…

Spire.Pdf for Java v9.1.4 Patcher

Spire.PDF for Java是一种 PDF API,它使 Java 应用程序无需使用第三方SDK 即可读取、写入和保存 PDF 文档。使用这个 Java PDF 组件,开发人员和程序员可以实现丰富的功能,从头开始创建 PDF 文件或完全在 Java 应用程序(J2SE 和 J2…

leetcode刷题记录总结-7.二叉树

文章目录零、二叉树理论二叉树的种类满二叉树完全二叉树二叉搜索树平衡二叉搜索树二叉树的存储方式二叉树的遍历方式二叉树的定义总结一、二叉树的遍历[144. 二叉树的前序遍历 ](https://leetcode.cn/problems/binary-tree-preorder-traversal/)题解递归实现迭代实现[94. 二叉树…

如何运营企业网站

企业网站的最终目的是给企业带来效益,树立企业形象。只要有这个目标定位,剩下的工作就是围绕这个定位去做和优化,米贸搜整理如下:1.增强被收录页面的重要性。收录页面的提升不仅仅是数量的提升,质量占据了很高的比重。…