使用xca工具生成自签证书

Posted 李迟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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

以上是关于使用xca工具生成自签证书的主要内容,如果未能解决你的问题,请参考以下文章

Nginx使用自签证书配置SSL实现HTTPS访问

Nginx 配置生成自签证书

cfssl自签证书

Window下生成OpenSSL自签证书

SSL/TLS深度解析--OpenSSL 生成自签证书

linux中openssl生成证书和自签证书