18
2024
01
01:20:46

使用xca工具生成自签证书

本文使用 xca 生成自签证书。

概述

之前使用 openssl 生成证书,在 golang 中测试,发现客户端连接失败,经查发现是Subject Alternative Name不支持导致的。因虚拟机 openssl 版本较低,有个功能无法实现,且升级麻烦(编译不通过),经搜索,找到 xca 工具生成证书,最终达到目的。文中所述,仅是笔者的使用,不具权威性。

小结

  • 创建各类证书过程大体相类似,只是模板不同。

  • 创建服务端证书时,在证书签名请求(CSR)时,设置Subject Alternative Name为证书使用的服务器IP(可多个)。注:域名待测试。客户端无此限制。

  • 使用相同的CA证书签发服务端/客户端证书。

  • 使用同一个服务端CSR,可以使用不同的参数签发不同的服务端证书,比如,已经签发了IP地址为A的证书,再次使用同一CSR,创建IP地址为B的证书。

下载

工具下载地址:https://github.com/chris2511/xca

双击 xca.exe 运行。

新建数据库

“文件”->“新建数据库”,输入数据库名称,输入2次密码。
在这里插入图片描述

下图创建了 foobar.xdb 数据库并使用之。
在这里插入图片描述

该数据库是用于存储创建、存储的证书信息,可长期使用/复用。数据库可先本地,也可选远程数据。

如果导入CA证书,似乎无法生成基于该CA证书的证书,但用相同的数据库能生成。

CA证书

创建密钥

文中使用默认值。
在这里插入图片描述

注:密钥在后续可复用。

创建CA证书

来源页面:
在这里插入图片描述

注意一定要点击“应用模板所有信息”按钮。

主体页面:
在这里插入图片描述

填充的:

myca
CN               cststudio
Guangxi          cststudio
Cenxi
cststudio

扩展页面

设置有效时间为30年。点击“应用”(注:截图未点击,左侧时间为默认年1年),再点击“OK”创建。
在这里插入图片描述
成功创建CA证书。
在这里插入图片描述

服务端证书

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

复用密钥

创建证书签名请求

来源,选服务端。
在这里插入图片描述

主体页面
在这里插入图片描述
主体填充

server127
CN               cststudio
Guangxi          127.0.0.1
Cenxi
cststudio

扩展页面
在这里插入图片描述

点击"OK"创建证书。

签发证书

选择服务证书,鼠标右键,点击“签发”。
在这里插入图片描述

来源页面:
在这里插入图片描述

注意选择CA证书。

扩展页面:
在这里插入图片描述
完成签发。
在这里插入图片描述

在签发步骤中,本文最为关注并设置的是Subject Alternative Name字段。

客户端证书

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

复用密钥

创建证书签名请求

在这里插入图片描述

主体页面:
在这里插入图片描述

主体填充

client127
CN               cststudio
Guangxi          127.0.0.1
Cenxi
cststudio

其它同服务端。

点击"OK"创建证书。

签发证书

选择客户证书,鼠标右键,点击“签发”。过程略。

来源页面:
在这里插入图片描述

注意选择CA证书。

扩展页面:
在这里插入图片描述

点击“OK”完成签发。

在相同的CA证书下的服务端、客户端证书列表:
在这里插入图片描述

(注:文中设置了30年,但结果是1年,因为选择时,没有点击右侧的“应用”,因已截图,暂不改)

导出文件

将密钥、CA证书、服务端证书、客户端证书分别导出为单独的文件。
在这里插入图片描述

在这里插入图片描述

最终得到:

my_ca.crt      证书
client127.crt  客户端证书
server127.crt  服务端证书
创建密钥.pem     密钥  ## 此名称后续修改了

使用笔记

修改内部名称

在这里插入图片描述

设置有效期

可按天、月、年为单位,设置后,点击“应用”才能在左侧“不晚于”看到失效日期。
在这里插入图片描述

证书有效期调整

由于先创建CA证书,设置了有效期50年,接着创建服务端证书,有效期也为50年,因操作有前后,所以服务端证书的结束时间比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, DNS:latelee.cn

创建服务端请求
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

签发
在这里插入图片描述
在这里插入图片描述

golang 的使用

golang 较新版本,ssl 证书使用Subject Alternative Name,因此需在证书中指定,从文中实验知,可指定单个IP、多个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




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/4836.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: