CentOS8使用gmssl搭建demoCA及配置OCSP服务

2023-05-16

本文档以CentOS8 + GmSSL2.5.4版本为例

1、GmSSL搭建CA

1.1 安装GmSSL

我们知道,Linux下默认只有openssl的发行版,并没有默认安装GmSSL,所以需要手动下载并编译安装。而GmSSL的大部分功能时基于openssl的,所以不能再使用动态编译安装,否则会导致链接冲突。
GmSSL的官方配置文档链接:关于GmSSL
可以参考官方的步骤,但需要注意的是,需要加上一个no-shared的选项,以使用静态编译安装。安装的时候选择合适的目录安装,示例文件夹为/usr/local/gmssl,如:
首先下载zip压缩包,

$ unzip GmSSL-master.zip
$ cd GmSSL-master

$ ./config --prefix=/usr/local/gmssl no-shared
$ make
$ sudo make install

说明:
安装完成之后,还需要将GmSSL命令行工具执行文件添加到系统环境变量。

[@ /]# echo 'export PATH="$PATH:/usr/local/gmssl/bin"' >> ~/.bash_profile   
[@ /]# source ~/.bash_profile  

如果添加了环境变量再使用gmssl还是提示找不到命令,其中一种可能是添加环境变量的身份为root,但使用时使用非root方式,或反过来。

1.2 创建demoCA工作目录

要创建自签CA,首先需要创建一个本地目录demoCA,可以根据实际情况选择路径,并在demoCA文件夹下创建certs、crl、newcerts、private四个文件夹,以及index.txt和serial文件。
以下示例的默认路径为:/home/你的用户名文件夹/Public/demoCA:

[@Public]# mkdir demoCA   
[@Public]# cd demoCA  
[@demoCA]# mkdir certs  crl  newcerts  private  
[@demoCA]# touch index.txt  
[@demoCA]# echo '01' >serial 

在这里插入图片描述

【说明】:
private文件夹:存放的是CA的私钥;
newcerts文件夹:存放新签署的证书;
certs文件夹:存放已颁发的证书;
crl文件夹:存放已吊销的证书;
index.txt:为证书状态的文本数据库文件;
Serial:为当前证书序列号索引文件,会自动计数(16进制)并累积,设置初始值为01。

1.3 修改配置文件

创建好demoCA的工作目录后,需要配置gmssl的配置文件,才能使之识别目录并生效。找到安装路径下/usr/local/gmssl/openssl.cnf文件。
在这里插入图片描述
使用命令修改:

 [@/usr/local/gmss]# sudo vim openssl.cnf

找到[ CA_default ]行
暂时修改以下部分,根据demoCA创建的路径修改对应内容:

 [ CA_default ]
	dir = /home/kds/Public/demoCA
	certs = /home/kds/Public/demoCA
	crl_dir = /home/kds/Public/demoCA/crl
	database = /home/kds/Public/demoCA/index.txt
	new_certs_dir = /home/kds/Public/demoCA/newcerts
	certificate = /home/kds/Public/demoCA/cacert.pem
	serial = /home/kds/Public/demoCA/serial
	private_key = /home/kds/Public/demoCA/private/cakey.pem

实例如下:
在这里插入图片描述

说明:这里的路径是实例创建的demoCA的路径,是让gmssl能够识别CA。如果在实际使用时,出现诸如“找不到根密钥、找不到根证书、找不到index.txt”等错误,即为配置路径有误,检查配置文件并修改即可。

1.4 生成CA

(1)生成根密钥
进入demoCA/private,使用如下实例命令创建SM2根密钥

 [@demoCA]# cd private/
 [@private]# gmssl ecparam -genkey -name sm2p256v1 -text -out cakey.pem

(2)生成根CA证书
使用如下命令将根据刚生成的根密钥生成根CA的证书。

 [@private]# gmssl req -new -x509 -key cakey.pem -out cacert.pem

需要填充以下一些信息,如下实例:非必选的可输入“.”忽略,其中Common Name为必填项。
全部填写完成后,将生成一个cacert.pem文件。
在这里插入图片描述

说明:cakey.pem 应存放于 demoCA/private/ 目录下,cacert.pem 存放于 demoCA/
目录下,将生成的cacert放到demoCA/目录下,1.3的路径配置已经提前将路径配置好了,两者要对应:

[@private]# mv cacert.pem ./..

1.5 添加信任

由于证书是自建的,所以需要把根证书添加到受信任的根证书颁发机构,后续利用此CA签发的证书才会受信任,否则仍然提示不可信。

 [@demoCA]# cat cacert.pem >> /usr/local/gmssl/certs/ca-bundle.crt

检查 /usr/local/gmssl/certs路径下的文件:
在这里插入图片描述

1.6 签发证书

(1)创建用户证书请求

 [@Public]# gmssl ecparam -genkey -name sm2p256v1 -text -out test1.key
 [@Public]# gmssl req -new -key test1.key -out test1.csr

在这里插入图片描述
说明,在创建请求时要填写的信息中,C(Country)、ST(State)、L(Locality)、O(Organization)要与demoCA证书中一致,如下:
在这里插入图片描述
(2)添加证书扩展项
证书的扩展项文件test.ext中主要包括OCSP_uri和crlDistributionPoints以及配置CA的根证书地址。
设置好可以保存到demoCA目录下,内容如下:

[@demoCA]# vim test.ext
# CRL
crlDistributionPoints = @crl_section
# OCSP
authorityInfoAccess = @ocsp_section
[ crl_section]
URI.0 = http://192.168.88.140/crl.pem
[ ocsp_section ]
# CA certificate
caIssuers;URI.0 = http://192.168.88.140/cacert.pem
# verify address
OCSP;URI.0 = http://192.168.88.140:8888

(3)签发

 [@Public]# gmssl ca -in test.csr -extfile demoCA/test.ext -out test.crt

-extfile表示使用证书扩展项应用到新生成的证书中,正常将会显示如下,签发过程中会询问确认签发这个证书,输入y即可,中间会检查文本数据库文件index.txt和证书序列号参考文件serial:
在这里插入图片描述

 Sign the certificate? [y/n]:y
 1 out of 1 certificate requests certified, commit? [y/n]y
	Write out database with 1 new entries
	Data Base Updated

说明:此时在 /home/kds/Public文件夹下已经有了test1.crt证书了,且在 /home/kds/Public/demoCA/newcerts目录下就可以看到新签发的证书了。证书名会根据serial文件中的数字命名,并自动增长,此示例为01.pem。
在这里插入图片描述
同时,demoCA下的文本数据库文件index.txt会自动写入一条数据,如下,V(verified)表示已签发,若后续吊销,此消息会变更,V将变为R(revoked)表示吊销。
在这里插入图片描述
此时可以使用证书查看命令,查看证书中的信息:

 [@Public]# gmssl x509 -in test1.crt -text

可以看到,证书扩展项中包含了添加的CRL分发点地址和根证书下载地址,以及OCSP的验证地址端口。
在这里插入图片描述

1.7 吊销证书

吊销证书指令:

 [@Public]# gmssl ca -revoke test1.crt

在这里插入图片描述
可以在文本数据库index.txt文件查看证书状态变化,已经吊销:
在这里插入图片描述

二、配置OCSP服务

2.1 启动OCSP服务

配置好文件后,gmssl命令行工具就可以启动OCSP服务了:

 [@demoCA]# gmssl ocsp -index index.txt -CA cacert.pem  -rsigner cacert.pem  -rkey private/cakey.pem -port 8888 -text -resp_no_certs

说明:这条命令的含义即,ocsp 表示使用OCSP服务,-index index.txt指定CA文本数据库文件为index.txt,-CA cacert.pem指定CA根证书为cacert.pem,-rsigner cacert.pem表示指定用于签发OCSP响应的证书为cacert.pem,-rkey cakey.pem表示指定用于签发OCSP响应的私钥文件为cakey.pem,-port 8888指定服务端口号为8888,-text表示将结果显示出来。
说明:-resp_no_certs选项可选,用来协定响应数据中不包含证书信息。

《GM/T 0014-2012数字证书认证系统密码协议规范》规定,用来签名OCSP响应信息的私钥必须是以下中的一个:
–颁发待校验证书的CA的私钥
–一个被信任的OCSP服务器,它的公钥被OCSP请求方信任
–一个CA指派的OCSP服务器,它具有一张由CA直接特殊颁发的用来表示此OCSP服务器可以为本CA发布OCSP响应的证书。

本示例中搭建自签CA与OCSP服务一体,所以直接使用自签CA的根证书、根密钥来签名响应数据。
执行成功后,会出现“waiting for OCSP client connections…”,如下:
在这里插入图片描述

2.2 客户端测试

说明:因为自签CA在局域网中搭建,在局域网内使用OCSP使用正常的OCSP请求,url使用”服务器地址:端口号”即可,如下:
测试客户端主机:192.168.88.128
测试OCSP服务器:192.168.88.139:8888
(1)开放连接端口
首先在搭建OCSP服务的本机上测试OCSP请求:使用127.0.0.1:8888,测试证书为首次生成且已吊销(1.7)的test1.crt,结果如下:
在这里插入图片描述
若要在局域网内另一台主机访问OCSP服务,还需要打开防火墙对这个端口的限制,才能让局域网主机连接进来并请求服务。
CentOS8防火墙相关的指令如下:

查看防火墙状态
# systemctl status firewalld
如果不是显示active状态,需要打开防火墙
# systemctl start firewalld
查看所有已开放的临时端口(默认为空)
# firewall-cmd --list-ports
查看所有永久开放的端口(默认为空)
# firewall-cmd --list-ports --permanent
添加临时开放端口
# firewall-cmd --add-port=223/tcp
添加永久开放的端口(例如:223端口)
# firewall-cmd --add-port=223/tcp --permanent
关闭临时端口
# firewall-cmd --remove-port=80/tcp
关闭永久端口
# firewll-cmd --remove-port=80/tcp --permanent
配置结束后需要输入重载命令并重启防火墙以生效配置
# firewall-cmd --reload  或
# systemctl restart firewalld

添加8888端口开放并重启一下防火墙即可,如下:
在这里插入图片描述
可以查看此时端口开放情况:
在这里插入图片描述
(2)客户机请求测试
在测试主机(192.168.88.128)下进入待校验证书文件目录,使用如下命令进行ocsp请求测试:

[@test]# gmssl ocsp -issuer cacert.pem -cert test1.crt -url http://192.168.88.139:8888
Response verify OK
test1.crt: revoked
	This Update: Aug 19 07:58:44 2021 GMT
	Revocation Time: Aug 19 06:26:45 2021 GMT

如上,Response verify OK表示响应成功,也可以在命令后面使用-respout test_resp.der将响应的DER编码格式文件输出,此时服务监听窗口显示如下:
在这里插入图片描述
以下为请求证书不同状态时客户机接收到的响应结果:
图2-1 请求证书状态为good时的响应
图2-2 请求证书状态为revoked时的响应
图2-3 请求证书为非本CA颁发(即unkown)时的响应

三、CRL配置

3.1 创建crl序列号文件

 [@demoCA]# echo ‘01’ >crlnumber

用来标识吊销证书列表的序号,每更新一次crl文件则递增1(16进制)。

3.2 修改配置文件

与OCSP配置一样,找到gmssl安装目录下/usr/local/gmssl/openssl.cnf文件,使用如下命令修改:

 [@gmssl]# sudo vim openssl.cnf

说明:主要需要修改以下两部分,其中crlnumber为刚创建的crlnumber文件路径,crl后面crl.pem的路径为我们即将创建的crl吊销列表文件的路径,将其放在demoCA的工作目录下:
在这里插入图片描述

3.3 吊销证书和生成CRL

gmssl吊销证书命令为:

 [@Publicl]# gmssl ca -revoke xxx.crt

实例如下:
在这里插入图片描述
说明:在每次CA吊销证书操作之后,都需要执行一次生成crl的命令,以更新当前的crl列表,生成和查看命令如下:

 [@demoCA]# gmssl ca -gencrl -out crl.pem
 [@demoCA]# gmssl crl -in crl.pem -text

生成的crl文件的名称(crl.pem要与openssl.cnf文件中配置的对应),且下次重新生成的时候可以使用相同名称以覆盖之前内容,生成新的列表内容。实例如下:
在这里插入图片描述

四、Nginx搭建及文件获取

4.1 安装nginx

Nginx是 Web和反向代理服务器,在CA主机配置Nginx以使局域网内其他主机访问CA的相关文件(获取根证书和下载CRL文件),从而进行证书验证。
CentOS8下安装nginx:

 [@\]# yum install nginx

默认会直接安装其所需要的所有依赖包,遇到输入敲‘y’即可。
在这里插入图片描述

4.2 修改配置

当前版本下的配置文件可以在/etc/nginx/中找到nginx.conf。
在这里插入图片描述
管理员权限修改如下部分:

 [@nginx]# sudo vim nginx.conf
----
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  192.168.88.140;
        root         /usr/share/nginx/html;
----

说明:主要是检查80端口监听状态,设置server_name(可以是域名,也可以直接是主机地址),root为nginx代理服务器的根目录,可以使用系统默认,也可以添加自己路径,此示例使用默认路径。

在这里插入图片描述
修改完成后使用如下命令重启nginx服务即可:

 [@nginx]# systemctl restart nginx

若报错,可能配置文件设置有问题,检查各个选项格式。

4.3 设置下载

注意:4.2设置的根目录若为默认路径,则将CA的根证书和crl文件复制到该目录下即可,crl每生成一次同名crl文件覆盖之前的crl.pem文件,以使其他主机获取到的是最新的crl,并将其复制到nginx根目录下:

 [@demoCA]# sudo cp cacert.pem crl.pem /usr/share/nginx/html

也可以直接将4.2根目录设为一个存储有cacert.pem和crl文件的路径(不建议直接使用demoCA路径,因为通过http可以直接访问该文件夹下所有文件;若采用自配置目录设置为根目录,需要设置好目录访问权限问题)。

4.4 根证书及crl文件获取

此时局域网内其他主机均可以通过如下命令下载(防火墙打开80端口(参考2.2)以使其他主机访问本机):

 [@Public]# wget http://192.168.88.140/cacert.pem
 [@Public]# wget http://192.168.88.140/crl.pem

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CentOS8使用gmssl搭建demoCA及配置OCSP服务 的相关文章

随机推荐

  • 使用免费阿里云服务器搭建远程桌面服务

    使用免费阿里云服务器搭建远程桌面服务 背景FRP连接云服务器推荐下载链接 首发于个人博客 背景 RDP xff0c Remote Desktop Protocol是微软推动开发的远程桌面协议 xff0c 它本身也会默认内置在win10专业版
  • AI电销机器人系统源码部署三:freeswitch安装Linux

    下载freeswitch安装包 xff08 freeswitch 1 10 2 release tar gz xff09 可以根据个人情况下载最新版本 https freeswitch org confluence display FREE
  • gitlab之webhook自动部署

    转自 xff1a https www jianshu com p 00bc0323e83f 动机 前段时间st0rm23在自己的服务器上搭好了自己的gitlab xff0c 现在我准备开搞自己的web项目了 但是如果每次写完都要用一些文件传
  • CCF CSP元素选择器

    CCF CSP元素选择器 结果 解析 利用bfs xff0c 这道题细节问题一方面是标签大小写不敏感 xff0c 另一方面是祖先的祖先仍然是该元素的祖先 span class token macro property span class
  • 【判断回文+约瑟夫问题】

    本实验用C语言实现 两个实验写在一个程序里 实验内容 xff1a 1 回文是指正读反读均相同的字符序列 xff0c 如 abba 和 abdba 均为回文 xff0c 但是 good 不是回文 试写一个算法判定给定的字符序列是否为回文 xf
  • C语言递归方法实现斐波那契数列

    本文介绍面试题经典试题之一 xff1a C语言用递归方法实现斐波那契数列 xff08 从第三个数起 xff0c 后一个数等于前面两个数之和 xff09 xff1a 1 1 2 3 5 8 13 21 34 include long int
  • char encode——ASCII

    char encode ASCII
  • 报错:ModuleNotFoundError: No module named ‘PIL‘,安装PIL的基本步骤

    ModuleNotFoundError No module named PIL 当出现这个问题时 xff0c 是因为没有安装PIL 安装PIL的基本步骤 xff1a 1 首先使用快捷键 Ctrl 43 R 运行打开任务栏 xff1b 2 在
  • ubuntu20.04+windows10_1909显卡直通(GPU Passthrough)

    休息的时候看到了Nvidia放开了个人显卡在虚拟机里使用的操作权限 xff0c 就花了点时间研究了下 xff0c 最终的目的是能在win虚拟机里流畅地打游戏 这里记录下踩过的坑 cpu支不支持虚拟化和你开没开虚拟化是俩玩意 网上的教程里都是
  • macOS Mojave 使用SMB局域网共享作为TimeMachine时间机器的备份盘报错Disk does not support Time Machine backups. (error 45)

    参考网上的教程 xff0c 使用 磁盘工具 创建一个 稀疏磁盘映像 在共享的文件夹中 xff0c 然后使用命令设置为TimeMachine的目标盘 sudo tmutil setdestination a Volumes SMBTimeMa
  • Debian apt update 提示 由于没有公钥,无法验证下列签名...

    sudo apt update 忽略 1 http mirrors aliyun com debian stretch InRelease 命中 2 http mirrors aliyun com debian security stret
  • Debian10:添加硬盘

    安装好Debian10系统后 xff0c 若服务器有多个硬盘 xff0c 则需要硬盘分区和格式化 xff0c 然后挂载到系统方能使用 当前服务器有两个硬盘 xff1a 硬盘0 xff1a 容量128G xff0c 用作系统盘 xff0c 已
  • Debian10: 首次配置

    Debian10系统安装完成后 xff0c 可以通过Windows客户端的XShell或同类工具远程登陆服务器进行操作 xff0c 这样会方便很多 此外 xff0c 还应该熟悉一下Linux一的vi工具和cat命令 xff0c cat命令用
  • Lz4压缩算法学习

    一 简介 Lz4压缩算法是由Yann Collet在2011年设计实现的 xff0c lz4属于lz77系列的压缩算法 lz77严格意义上来说不是一种算法 xff0c 而是一种编码理论 xff0c 它只定义了原理 xff0c 并没有定义如何
  • 03. 面向对象分析过程

    03 面向对象分析 1 面向对象 xff08 1 xff09 OOA Object oriented Analysis 面向对象分析 事物的分类 命名 描述 xff08 2 xff09 OOD Object oriented Design
  • 修改python pip安装第三方包的安装路径

    由于某种原因将pip的安装路径设置到了C盘用户目录下面 xff0c 导致每次清理垃圾时就顺带把安装的第三方包给清理掉了 xff0c 因此需要更改pip第三方包的安装路径 首先找到python的安装路径 where python 在pytho
  • 树莓派3b终端命令行播放器omxplayer,通过HDMI屏幕播放视频

    omxplayer是一款可以使用命令行控制的播放器 xff0c 图像通过 HDMI显示到屏幕上 树莓派可以运行omxplayer xff0c 在终端使用命令行播放视频 1 安装omxplayer sudo apt get install o
  • stm32单片机OLED取字模软件使用 PCtoLCD2002

    PCtoLCD2002 xff0c 适用单色屏取字模制作字库 xff0c 进行位图转换 xff0c 还可自行描点 xff0c 使用非常简单方便 1 取字模 xff0c 制作字库 打开PCtoLCD2002 单片机OLED或者其他单色屏 xf
  • Linux 下编译并安装配置 Qt 全过程

    1 获得源代码 src 官网下载地址 xff1a ftp ftp qt nokia com qt source 2009 年 10 月 1 日发布的 qt x11 opensource src 4 5 3 tar gz xff0c 大小 1
  • CentOS8使用gmssl搭建demoCA及配置OCSP服务

    本文档以CentOS8 43 GmSSL2 5 4版本为例 1 GmSSL搭建CA 1 1 安装GmSSL 我们知道 xff0c Linux下默认只有openssl的发行版 xff0c 并没有默认安装GmSSL xff0c 所以需要手动下载