当前位置: 首页 > news >正文

再次使用xca软件生成自签证书

本文使用 xca 软件的新版本v2.9.0生成自签的证书。

概述

2年前(2023年初),笔者已经使用xca软件生成自签证书进行测试,其时写了篇文章进行介绍,但没有在生产环境上真正使用——没有契机,因为生产环境必须保稳定。

现在有了机会——很多时候,就是缺机会、际遇,但这不是不做准备的理由。于是再次研究,同时计划写一写相关的管理办法和指导方案。即怎么管理证书,如何签发证书,证书记录,等等。

xca是开源项目,截至本文发表时(2025年9月),最新版本为2.9.0。使用上大差不大,但本次多了经验,也更偏向于实际应用。因此,与之前使用的方法稍有不同,但目标是一致。当然,文中所述,依然是笔者的个人使用,不具代表性,仅供参考。

小结

  • 创建各类证书过程大体相类似,只是模板不同。实际使用中,对于证书主题信息,如国家、地区、组织等,基本不会太改,变化的主要是域名、IP地址和有效期之类的信息。因此强烈建议创建种类模板待用,提升效率。
  • 个人实践:保管好xdb数据库和访问数据库的密码,创建好模板,不同业务系统使用不同的私钥创建证书。对于同一业务系统,当需要为新域名或IP新增服务端证书时,基于模板使用同一私钥快速创建,而客户端证书不用再生成。
  • 因为是自签证书,强烈建议使用足够长的有效期,比如50年、100年。笔者见过因证书过期导致的生产事故。虽然与己无关,但却应该引以为戒。
  • xca新的版本与之前的版本,部分文字做了调整。如证书的有效期设置界面,新版本为“生效时间”、“失效时间”,之前使用的版本分别为“不早于”、“不晚于”。个人认为新版本的更易理解,旧版本比较生硬。

下载

下载地址1:https://github.com/chris2511/xca/releases

下载地址2:https://hohnstaedt.de/xca/index.php/download

本文下载的是免安装版本,文件名:xca-portable-2.9.0.zip (sha256校验码:50d8a44a795a07ebef4238e22e0318a607f85464aba9f2853e0630196de1141f)

发布日期:2025年3月29日。(注:上次使用的是2.4.0,发布日期为2021年5月8日)

使用:解压后,进入目录,双击 xca.exe 运行即可。

软件界面:
在这里插入图片描述

新建数据库

xca使用本地数据库,用于存储创建、存储的证书信息,可长期使用/复用。也支持远程数据库(使用ODBC连接),本文暂不涉及。

当创建好数据库后,下次选择“文件”->“打开数据库”,选择数据库,输入密码即可。

点击“文件”->“新建数据库”,输入数据库名称,输入2次相同的密码。点击“确定”后会提示PKCS#12算法不安全,根据提示,更改为安全的AES-256-CBC。
在这里插入图片描述
下图创建了 foobar.xdb 数据库并使用之。

在这里插入图片描述

创建模板

为快速创建证书,本次实践使用模板的方式。

CA模板

创建模板:
在这里插入图片描述
在主题页面编辑信息,包括名称和主题信息。
在这里插入图片描述
在扩展页面设置有效期。
在这里插入图片描述
创建成功:
在这里插入图片描述

服务端证书模板

创建模板:
在这里插入图片描述
主题信息填充的内容有:

模板名称
CN               cststudio
Guangxi          cststudio
Cenxi
cststudio

可在扩展页面再次设置有效期,也可以设置支持的域名或IP(也可不设置)。
在这里插入图片描述
IP地址填充:

IP:127.0.0.1, IP:192.168.28.11, IP:172.18.18.18,DNS:latelee.cn

创建私钥

私钥可在CA证书、服务端证书等场景使用。可以设置多个私钥,不同的证书使用不同的私钥。

创建私钥:
在这里插入图片描述
创建成功:
在这里插入图片描述
可多创建几个私钥,用于不同的证书。本文就创建了多个,如下:
在这里插入图片描述

创建CA证书

利用自建模板创建CA证书。

在来源页面,签名处只能选“创建自签名证书”,因为此时还没有CA证书。选择前面的CA证书模板,注意一定要点击“应用所有信息”按钮。这样就可以直接沿用该模板已填写好的信息了。
在这里插入图片描述
在主题页面添加名称,调整主题信息:
在这里插入图片描述
主题填充内容如下:

证书名称
CN               cststudio
Guangxi          cststudio
Cenxi
cststudio

在扩展页面设置有效时间,此处已是模板的有效期100年,可自行调整。点击“确定”创建。
在这里插入图片描述
成功创建CA证书。
在这里插入图片描述

创建和导出证书

创建服务端证书

服务端证书的创建过程与CA证书类似, 只是模板不同。

在来源页面,选前面已创建了的CA证书,再服务端证书模板,并点击“应用所有信息”。
在这里插入图片描述
在主题页面添加名称,调整主题信息:
在这里插入图片描述
在扩展页面设置有效期,指定服务端域名或IP,点击"确定"创建证书。
在这里插入图片描述
成功创建证书。
在这里插入图片描述

创建客户端证书

客户端证书的创建过程与CA证书类似, 只是模板不同。

在来源页面,选前面已创建了的CA证书,使用CA模板(注意,只是使用了其主题信息),并点击“应用主题信息”。
在这里插入图片描述
在主题页面添加名称,调整主题信息,如邮箱地址emailAddress,等。
在这里插入图片描述
再在来源页面选client模板,点击“应用扩展信息”。
在这里插入图片描述
在扩展页面设置有效期,默认为365天,即1年,可调整。点击"确定"创建证书。
在这里插入图片描述
成功创建证书。
在这里插入图片描述

证书列表

经过上述步骤,已创建如下的证书:
在这里插入图片描述

导出文件

将密钥、CA证书、服务端证书、客户端证书分别导出为单独的文件。下面是部分导出示例。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最终得到如下文件:

我的CA证书.crt         证书
client-127.0.0.1.crt  客户端证书
client-127.0.0.1.pfx  客户端浏览器安装的证书
server-127.0.0.1.crt  服务端证书
测试密钥1.pem          生成服务端和客户端的密钥(非生成CA的密钥)注:经测试,上述的各类证书导出后缀名为pem,也可以在golang中正常使用。

使用笔记

内部名称

在xca中看到的名称是内部名称,可以任意修改。包括私钥、证书、模板等,以私钥为例子说明:
在这里插入图片描述

修改数据库密码

xca支持修改数据库密码,可定期修改,让数据库更加安全。示例如下:
在这里插入图片描述

私钥列表

在私钥页面,可以查看所有的私钥及使用次数(或是引用的证书的数量?存疑)。
在这里插入图片描述

使用模板

本文设置了不同的模板,在创建证书时,可以直接使用模板已有的信息。如下图所示,可以先选CA模板,点击“应用主题信息”,此时,将要创建的证书的主题信息就和CA的一样。再选服务端模板,再击“应用扩展信息”,此时,证书的扩展信息和服务端模板一样。当然,也可以直接点击“应用所有信息”。但是,这些信息是可以调整的,并不是一成不变,可以理解这些模板减少了实际输入的内容,提升效率。
在这里插入图片描述

设置有效期

可按天、月、年为单位,设置后,点击“应用”才能生效。下图为未点击前,失效时间未变化的示例。
在这里插入图片描述

调整证书有效期

基于某一个CA证书创建的证书,有效期不能大于CA证书。在创建时,会判断,如出现错误,选择“自动调整日期并继续”即可。
在这里插入图片描述
注:从图中可以看到,确认对话框有“仍然继续”选项,笔者选择该项后是可以创建的,但不清楚有什么后果,因此建议不要选。

同时包含多个IP地址的服务端证书

从管理角度看,一个服务端证书绑定一个域名或IP是合理的,但也支持多个,各项以逗号隔开。比如:

IP:127.0.0.1, IP:192.168.28.11, IP:192.168.18.10, IP:192.168.28.1, IP:192.168.9.100, IP:172.18.18.18, IP:172.18.18.168, IP:172.18.18.188, DNS:latelee.cn

一个示例如下:
在这里插入图片描述
也可以进入编辑模式,一一添加。示例如下:

在这里插入图片描述
注意,先添加,再验证,正确后,才能点击“应用”。下图是IP地址不合法,界面出现的提示:
在这里插入图片描述

同一CA证书可产生不同服务端的证书

使用同一CA证书,可以创建不同服务端证书(因要指定IP),使用同一客户端可正常请求。
在这里插入图片描述
注:从图中也可看到从属关系。

使用既有数据库生成新的证书

可以利用既有数据库和CA生成新的证书,这样能持续创建各类证书。只保证使用相同CA证书和KEY,重新生成服务端证书,增加新的IP地址,客户端证书无法更改也可正常使用。(见上小节图示)

证书实验

光说不练假把式,光练不说傻把式,又练又说真把式。为验证文中的的证书,也为了更深入理解,特使用golang编写服务端和客户端的测试程序。根据不同的场景进行验证。

浏览器访问

由于是自签发证书,浏览器不认,所以会提示不安全,提示证书无效。双击我的CA证书.crtclient-127.0.0.1.pfx 安装证书后,再次访问,错误如旧。这块不是重点,所以目前暂不纠结。

在这里插入图片描述
在这里插入图片描述
证书详情:
在这里插入图片描述

CA证书不同

服务端证书A使用CA证书A生成,客户端证书B使用CA证书B生成。两者无法正常通信。

客户端发送请求时提示如下:

tls: failed to verify certificate: x509: certificate signed by unknown authority

服务端提示:

TLS handshake error from 10.20.5.240:38919: remote error: tls: bad certificate

证书密钥不同

同一个CA情况下,服务端证书使用密钥A,客户端使用密钥B,两者无法正常通信。(注:上文就设置了2个密钥)

客户端发送请求时提示如下:

tls: private key does not match public key

服务端未收到请求,应该是真正发送前已经出错了。

服务端证书过期

将系统时间改为一年后,重新运行服务端和客户端。两者无法正常通信。

客户发送请求时提示如下:

tls: failed to verify certificate: x509: certificate has expired or is not yet valid: current time 2026-09-29T02:29:24+08:00 is after 2026-09-28T15:30:00Z

服务端提示:

2026/09/29 02:29:24 http: TLS handshake error from 127.0.0.1:59969: remote error: tls: bad certificate

注意,客户端输出的证书有效期时间2026-09-28T15:30:00Z为UTC时间。

客户端证书过期

创建客户端证书过程中,需指定客户端的证书有效期(默认1年内)。不过,经过多次测试,发现即使客户端证书过期了,只要服务端证书正常,请求还是正常的。但这结论和自己的认知不一样。不确定是不是测试方法有误。

服务端证书IP不匹配

服务端证书绑定了域名或IP地址,如证书不在指定的域名或IP服务器运行,则无法请求。即本是服务器A的证书,在服务器B上使用,客户端无法请求B服务。解决方法:

测试示例:

B服务器日志输出:
http: TLS handshake error from 192.168.28.1:65102: remote error: tls: bad certificate
客户端请求输出:
send post failed: Post "https://192.168.28.11:9000/testing": x509: certificate is valid for 127.0.0.1, not 192.168.28.11

上面测试的是客户端与服务端之间的通信请求。如果在B服务器上使用服务器A的证书,则使用浏览器依然可以访问。

服务端证书新增IP

接上面的测试,围绕一个场景:

假定已经签发了服务端和客户端,目前服务端程序运行于A机器 上,IP为127.0.0.1。因某些原因,需要将其迁移到B机器上,IP为192.168.28.11。但不想重新签发客户端证书,那么可以重新签发服务端证书,迁移程序的同时更新证书,此过程只需要客户端更新请求地址即可,证书不动(当然,重新签发客户端证书也行)。

http://www.dtcms.com/a/424335.html

相关文章:

  • 【小白入门docker】创建Spring Boot Hello World应用制作Docker镜像并运行
  • 【Redis学习】String字符串
  • 项目实战:ecshop
  • 白城北京网站建设邵阳小学网站建设
  • SpringBoot 的配置文件与日志
  • 物联网技术与应用第三节课笔记
  • 【Java】P10 面向对象编程完全指南(S1-2 基础篇 包管理与导入)
  • C++ 特性 --内部类 模板类中取出来类类型问题
  • ip地址直接访问网站东莞市网络seo推广企业
  • 5090裸金属租用:捷智算助力企业数字化转型
  • 北京网站建设设计南阳网站建设哪家好
  • 大模型原理与实践:第一章-NLP基础概念完整指南_第1部分-概念和发展历史
  • 国企门户网站建设方案电子商务网站策划方案
  • 【Linux】cgdb调试工具的使用
  • 南京建设网站要多少钱线上推广活动
  • 做网站专题页需要注意什么app制作开发报价
  • iTerm2使用Shell Integration优雅地实现单个文件上传与下载
  • 怎样做网站漂浮精通网站开发
  • 西安网站制作sxyun昆明网站建设公司哪家好
  • 突破NER性能瓶颈:BERT与LLM协同的混合架构实践
  • 网站建设与管理课件seo排名优化联系13火星软件
  • 网站做前端去国外做外卖网站
  • 分布式任务事务框架设计与实现方案
  • 漳州 网站建设多少钱成都旅游攻略景点必去
  • pytorch基本运算-torch.normal()函数生成的随机数据添加噪声
  • 通辽建设工程网站网上做效果图网站有哪些
  • DragonBalls_One013
  • 湖南网站建设哪家有定制软件如何收费
  • 专门做招商的网站是什么wordpress两栏
  • 七彩喜艾灸机器人:传统技艺与AI的共生共舞