博客原文

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内容

libvirt TLS的更多相关文章

  1. Virtualization API之libvirt

    The virtualization API 之开源 libvirt探究 By Ruiy: libvirt supports Hypervisors(注,相关的hypervisors项目的权威网站已经 ...

  2. libvirt 命令行交互工具之virsh

    libvirt是当前主流VM最低层库.IBM PowerVM也不例外,libvirt是深入玩虚拟化必须玩转的东西; 简单测试玩玩libvirt 的virsh命令行交互工具, 你我都知libvirt大体 ...

  3. libvirt 基于C API基本使用案例

    玩开源分享,需要有干到底的精神,今晚随便逛逛技术论坛突发有感;Ruiy不足之处,需跟进了; 最近变的较懒了,干活有点没劲,也不怪干来干去收获不大,缺少鼓励! 现在玩的技术大多是上不了台面了,想过没,你 ...

  4. libvirt hypervisors信息采集

    libvirt采集hypervisors信息的通用格式 driver[+transport]://[username@][hostname][:port]/[path][?extraparameter ...

  5. ubuntu15.04下编译 libvirt

    很久没有编译 libvirt了. 工作需要,重新编译. [org_ref]: http://libvirt.org/compiling.html 很简单. 编译过程, 还是很多问题. 依赖包(给懒人参 ...

  6. libvirt C-API

    1,warming-up Specifying URIs to libVirt;name parameter to virConnectOpen or          virConnectOpenR ...

  7. libvirt(virsh命令介绍)

    有了virt-install是安装虚拟机的命令,当然也需要一个管理虚拟机的命令了,那就是virsh. virsh命令使用 virsh <command> <domain-id> ...

  8. libvirt(virsh命令总结)

    virsh回车进入交互式界面: version pwd hostname 显示本节点主机名 nodeinfo  显示节点信息 list --all 显示所有云主机 7种状态: running  运行中 ...

  9. &lt;转&gt; Libvirt学习总结

    感谢朋友支持本博客.欢迎共同探讨交流.因为能力和时间有限,错误之处在所难免,欢迎指正! 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/gaoxingnengjisua ...

随机推荐

  1. [转] Java内部类之闭包(closure)与回调(callback)

    闭包(closure)是一个可调用的对象,它记录了一些信息,这些信息来自于创建它的作用域.通过这个定义,可以看出内部类是面向对象的闭包,因为它 不仅包含外围类对象(创建内部类的作用域)的信息,还自动拥 ...

  2. C#中将图片文件转化为二进制数组-用于数据库存储

    在项目开发中,使用SQL Server存储数据,数据类型image可以保存图片.但是在存储之前需要将图片转化为二进制数组的形式进行赋值. 将图片文件转换为二进制数组 /// <summary&g ...

  3. 基于jQuery仿uploadify的HTML5图片上传控件jquery.html5uploader

    (function($){ var methods = { init:function(options){ return this.each(function(){ var $this = $(thi ...

  4. PHP编写的SVN类

    <?php /** * SVN 外部命令 类 * * @author rubekid * * @todo comment need addslashes for svn commit * */ ...

  5. java里面List和Array的区别是什么?

    java里面的List和Array的区别是什么? 1:数组是定长,list是自动增长.2:数组效率高,list效率低.总结:数组牺牲功能增加效率,list牺牲效率增加功能. http://bbs.cs ...

  6. Delphi 做ActiveX的详细过程

    1.新建 如下图 点击OK 依然点击OK 出现了如上图的节面,就像窗体一样. 然后 你就想干什么干什么. 这个做好之后, 这个是我设计的窗体. 然后 就添加 外部可以调用的接口了. 如果你不想让外部调 ...

  7. Java中如何判断当前环境是大端字节顺序还是小端字节顺序

    Java非字节类型的基本类型,除了布尔型都是由组合在一起的几个字节组成的.这些数据类 型及其大小总结在表 2-1 中. 表:基本数据类型及其大小 数据类型 大小(以字节表示) Byte 1 Char ...

  8. Apache 2.x+jboss6.1反向代理session共享问题设置

    2016年8月4日,第一次开笔写博客园,今天在公司解决了一个问题. apache+jboss做负载均衡的问题一直困扰了很久.问题描述如下,使用apche做反向代理转发给3台jboss 的app,app ...

  9. Y - Design T-Shirt(第二季水)

    Description Soon after he decided to design a T-shirt for our Algorithm Board on Free-City BBS, XKA ...

  10. 《Linux内核分析》 week4作业-使用嵌入式汇编调用一个系统调用

    一.fork的嵌入式汇编执行 #include <stdio.h> #include <unistd.h> int main(){ pid_t pid; asm volatil ...