本文档以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/demoCAcerts = /home/kds/Public/demoCAcrl_dir = /home/kds/Public/demoCA/crldatabase = /home/kds/Public/demoCA/index.txtnew_certs_dir = /home/kds/Public/demoCA/newcertscertificate = /home/kds/Public/demoCA/cacert.pemserial = /home/kds/Public/demoCA/serialprivate_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]:y1 out of 1 certificate requests certified, commit? [y/n]yWrite out database with 1 new entriesData 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: revokedThis Update: Aug 19 07:58:44 2021 GMTRevocation Time: Aug 19 06:26:45 2021 GMT

如上,Response verify OK表示响应成功,也可以在命令后面使用-respout test_resp.der将响应的DER编码格式文件输出,此时服务监听窗口显示如下:

以下为请求证书不同状态时客户机接收到的响应结果:


三、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

CentOS8使用gmssl搭建demoCA及配置OCSP服务相关推荐

  1. 企业级基于Centos8.5配置IPXE服务批量部署windows方案

    一.目的 无需U盘,通过网络PXE启动,实现快速安装操作系统! 二.实验环境(皆依托于实际生产环境) 实验拓扑如下,规划出两个网段:生产(10.142.184.0/24).办公(10.157.208. ...

  2. CentOS8:Docker搭建Jenkins2.60.3版本,及更换jenkins下载源

    一.CentOS8:Docker搭建Jenkins2.60.3版本 1. 配置jenkins启动命令 启动镜像文件前提:在宿主机配置好jenkins容器挂载地址,防止数据丢失 # 新建jenkins_ ...

  3. centos8安装Nginx1.19.6并配置多域名反向代理

    centos8安装Nginx1.19.6并配置多域名反向代理 Nginx是什么? 为什么要使用Nginx? 安装Nginx1.19.6 安装依赖包 创建目录 下载 解压 编译安装 测试Nginx配置文 ...

  4. CentOS 6.7 Gitolite 服务搭建及TortoiseGit配置连接

    咳咳~好几天没写博文啦,这几天都在研究Git,没办法公司要要抛弃SVN转站Git,废话就不多说,下面我们进行操作演示: 环境:之前搭建的Redis-Master服务器一枚,配置一般般~ 工具:Tort ...

  5. mac mysql 链接_mac上搭建mysql环境配置和Navicat连接mysql

    mac上搭建mysql环境配置 注意:mysql版本要和你的MAC版本保持一致 2.一路傻瓜式点击下一步 此处选择"Use Legacy Password Encryption", ...

  6. 极速搭建vanish - 安装/配置/维护

    一. 简单安装varnish(三步搞定,直接复制代码执行) 创建基本配置环境 # 创建varnish 运行用户 /usr/sbin/groupadd www -g 80 /usr/sbin/usera ...

  7. 极海APM微控制器基于IAR开发环境搭建与工程调试配置方法

    极海APM微控制器基于IAR开发环境搭建与工程调试配置方法 ✨本篇主要针对基于IAR for ARM版本:V9.30.1环境搭建和工程调试配置过程进行介绍,当然也同样适用于基于ARM架构芯片的开发使用 ...

  8. php平台cdn搭建,PHP 搭建一个网站配置CDN产品?

    PHP 搭建一个网站配置CDN产品?留意存留或个人收藏自然环境配备的文本文档,开发工具升级搞好备份数据.团结协作篇:应用团结协作专用工具如 GITHUB ,优良的版本控制和工作流引擎会降低矛盾的成本, ...

  9. 《LoadRunner 12七天速成宝典》—第1章 1.3节环境搭建之虚拟机配置

    本节书摘来自异步社区<LoadRunner 12七天速成宝典>一书中的第1章,第1.3节环境搭建之虚拟机配置,作者陈霁,更多章节内容可以访问云栖社区"异步社区"公众号查 ...

最新文章

  1. 机器人越像人越好?Science子刊:被人形机器人一直盯着,你会变「蠢」
  2. 栈的动态顺序存储和实现(C语言)【栈】(7)
  3. 《SuperMap GIS二次开发MVC实战训练---江海区慢性病防治院系统》项目研发阶段性总结
  4. QQuickRenderControl
  5. ios6.0,程序为横屏,出现闪退
  6. Perl内置特殊变量
  7. SQL SERVER模糊匹配查询
  8. Unity Shaders and Effects Cookbook (3-4) 使用高光贴图
  9. 火星开发的价值_发现“火星”岩石密度比预想更低,火星探测开发的“九大价值”...
  10. 什么计算机有hdmi接口,hdmi接口是什么?hdmi是什么?
  11. 2017年精选文章集合
  12. 管螺纹如何标注_你所不知道的机械螺纹全面常识(分享篇),赶紧收藏下吧
  13. toupper() 函数
  14. 抖音直播带货变现,带货脚本文案怎么制作?丨国仁网络资讯
  15. Build file: no target in no project
  16. 【踩坑记录】uni-app工程转vue-cli 工程
  17. Unity3D动态修改RectTransform
  18. 怎么设置邮箱自动回复?哪个品牌邮箱自动回复设置最简单?
  19. 一文读懂 IoT 物联网场景 5G 专网技术
  20. 面试时,不知如何和面试官谈期望薪资,不妨看看这篇文章

热门文章

  1. 用python写投票程序_大话python最终篇,web.py 开发的投票程序demo
  2. SD卡数据丢失恢复软件免费下载
  3. linux安装 pycocotools_Windows下安装 pycocotools
  4. 职场必备的64种思维模式
  5. 视频教程-C++微服务架构及安全云盘项目实训-C/C++
  6. 【游戏开发实战】使用Unity制作水果消消乐游戏教程(二):随机生成水果
  7. zabbix不支持mysql8_zabbix问题集锦
  8. Zircon Mobile crushing equipment Manufacturers Australia
  9. 哈工大 博士肄业 计算机 李鸣鹏,16岁高分考上哈工大,从肄业生到低保户,为数学穷其一生...
  10. 阿里云免费证书DV SSL申请过程记录