www.cnblogs.com/ruiyqinrui

开源、架构、Linux C/C++/python AI BI 运维开发自动化运维。 春风桃李花 秋雨梧桐叶。“力尽不知热 但惜夏日长”。夏不惜,秋不获。@ruiY--秦瑞

python爬虫,C编程,嵌入式开发.hadoop大数据,桉树,onenebula云计算架构.linux运维及驱动开发.

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  2912 随笔 :: 9 文章 :: 51 评论 :: 185万 阅读

博客原文

http://hi.baidu.com/wwfmarcpjkbdiod/item/7b43c89e949d7fbbcd80e590

 

构建Libvirt的x509证书远程tls连接
http://libvirt.org/remote.html


连接格式:

1. 通用格式:
driver[+transport]://[username@][hostname][:port]/[path][?extraparameters]

2. 如使用qemu和tls的:(在配置完毕后)
virsh -c qemu+tls://10.61.1.85/system


证书类型及位置:

见http://libvirt.org/remote.html
1. CA证书:server和client
2. server的私有Key,及公有Key(由CA颁发的):server上
3. client的私有Key,及公有Key(由CA颁发的):client上


TLS认证原理:

1. client认证server。client将server发送的证书与server的hostname进行匹配
2. server认证client的可控性。server对client的IP,或者client的IP和证书来进行认证
3. 默认的server的libvirt的配置是不对DN进行检查,也就是说允许所有的拥有CA颁发的证书的client登入


搭建CA、server端证书、client端证书:

1. 过程见那个网页
2. 没有的/etc/pki/libvirt目录可以创建


配置、运行和调试:

1. server上配置:
如果想显式控制访问者,则可以修改/etc/libvirt/libvirtd.conf
a. Uncomment : tls_allowed_dn_list,改成类似这样的”
tls_allowed_dn_list = ["C=CN,O=red_hat,L=Beijing,ST=Beijing,CN=10.61.1.87"]

b. 注意几点:
i. 各个项的顺序要一致,比如使用这样则不能认证:
tls_allowed_dn_list = ["C=CN,ST=Beijing,L=Beijing,O=red_hat,CN=10.61.1.87"]
ii. 中间逗号后面不能有空格
iii. 如果犯了i,ii的错误,则可能会有这样的错误:
Connecting to uri: qemu+tls://10.61.1.85/system
error: unable to connect to libvirtd at '10.61.1.85': Invalid argument
error: failed to connect to the hypervisor

2. client及server端的运行:
a. server端libvirtd启动必须要以--listen选项启动
b. client端执行:virsh -c qemu+tls://10.61.1.85/system

3. 认证失败的调试
a. 使用/usr/sbin/libvirtd --listen --verbose 来启动libvirtd,可以出现部分错误信息,如tls_allowed_dn_list各项的顺序不对时,会出现:
15:44:48.527: error : remoteCheckCertificate:1138 : remoteCheckCertificate: client's Distinguished Name is not on the list of allowed clients (tls_allowed_dn_list).  Use 'openssl x509 -in clientcert.pem -text' to view the Distinguished Name field in the client certificate, or run this daemon with --verbose option.
15:44:48.527: error : remoteCheckAccess:1157 : remoteCheckCertificate: failed to verify client's certificate

b. 接上一条,如果出现了那个信息,可以使用openssl x509 -in clientcert.pem -text来对client的公钥进行信息输出,并注意这个字段:
Subject: C=CN, O=red_hat, L=Beijing, ST=Beijing, CN=10.61.1.87
其实这一行的主体内容去掉空格,就是tls_allowed_dn_list中应该填的DN内容

posted on   秦瑞It行程实录  阅读(938)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
www.cnblogs.com/ruiyqinrui
点击右上角即可分享
微信分享提示