宝安大型商城网站建设,定制客户管理软件,vip网站怎么做,太原新媒体运营公司本文使用 xca 生成自签证书。 概述
之前使用 openssl 生成证书#xff0c;在 golang 中测试#xff0c;发现客户端连接失败#xff0c;经查发现是Subject Alternative Name不支持导致的。因虚拟机 openssl 版本较低#xff0c;有个功能无法实现#xff0c;且升级麻烦在 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