√ Программы,
√ Сайты, √ Библиотеки
√ Хостинг, √ Домены
ООО МааСофтваре
+7(928)442-41-32
support@maasoftware.ru
   
Подключаемся к Libvirt, SPICE и VNC через TLS/SSL на Debian 9 с KVM
/ Помощь
apt-get install gnutls-bin
mkdir CA && cd CA
certtool --generate-privkey > cakey.pem
mcedit ca.info
certtool --generate-self-signed --load-privkey cakey.pem --template ca.info --outfile cacert.pem
ls
cd ..
mkdir server && cd server
certtool --generate-privkey > serverkey.pem
mcedit server.info
certtool --generate-certificate --load-privkey serverkey.pem --load-ca-certificate ../CA/cacert.pem --load-ca-privkey ../CA/cakey.pem --template server.info --outfile servercert.pem
ls
cd ..
mkdir client && cd client
certtool --generate-privkey > clientkey.pem
mcedit client.info
certtool --generate-certificate --load-privkey clientkey.pem --load-ca-certificate ../CA/cacert.pem --load-ca-privkey ../CA/cakey.pem --template client.info --outfile clientcert.pem
ls
cd ..

#spice:
mkdir -p /etc/pki/CA
cp CA/cacert.pem /etc/pki/CA/
mkdir -p /etc/pki/libvirt/private
cp server/serverkey.pem /etc/pki/libvirt/private/
cp server/servercert.pem /etc/pki/libvirt/
cp client/clientkey.pem /etc/pki/libvirt/private/
cp client/clientcert.pem /etc/pki/libvirt/
/etc/init.d/libvirtd stop
libvirtd --listen --verbose
$ virsh -c qemu+tls://user1@serv1/system list --all
mcedit /etc/default/libvirtd
#libvirtd_opts="-d --listen"
mkdir -p /etc/pki/libvirt-spice
cp CA/cacert.pem /etc/pki/libvirt-spice/ca-cert.pem
cp server/servercert.pem /etc/pki/libvirt-spice/server-cert.pem
cp server/serverkey.pem /etc/pki/libvirt-spice/server-key.pem
mkdir .spicec
cp CA/cacert.pem .spicec/spice_truststore.pem
mcedit  /etc/libvirt/qemu.conf
/etc/init.d/libvirtd restart
journalctl -xe
spicy -h serv1 -s 5901 -w pass

Подробно: источник: http://www.umvirt.ru/node/114

Подключаемся к Libvirt, SPICE и VNC через TLS/SSL

Чтобы работа по сети была безопасной и удобной необходимо использование SSL сертификатов для создания зашифрованных TLS-соединений. Так же TLS-соединения сертификаты могут использованы для организации комплексных сервисных решений построенных на пример на технологии Libvirt. 

Внимание: В новых версиях virt-manager автоматически создает TLS-порт для виртуальной машины использующей Spice-протокол удаленного доступа. В случае если в системе не установлены SSL-сертификаты или вручную не подправлена конфигурация виртуальной машины, запуск гипервизора QEMU осуществляться не будет!

Настройка работы с помощью зашифрованных соединений состоит из следующих этапов: 

  1. Создания сертификатов шифрования 
  2. Размещения сертификатов в нужных каталогах. 

Создание сертификатов

Чтобы приступить к созданию сертификатов нужно выбрать каталог где будут создаваться сертификаты и перейти в него, а также установить пакет gnutls-bin.

$ sudo apt-get install gnutls-bin

Рассмотрим простой пример: 

  • Удостоверяющий центр - 1шт.
  • Сервер - 1шт.
  • Клиент - 1шт.

Для более сложных примеров изменяется только количество серверов и клиентов. Придется переделать структуру папок сертификатов а также изменить пути в приведенных ниже примерах.

Сертификат удостоверяющего центра 

Первым делом создается сертификат удостоверяющего центра (УЦ) также называемого Certificate Authority (CA).

0. Создаем каталог CA и входим в него:

$mkdir CA
$ cd CA

1. Создадим приватный ключ УЦ с помощью следующей команды

$ certtool --generate-privkey > cakey.pem

2. Добавим информацию в сертификат. Для этого создадим текстовым файл ca.info со следующим содержимым:
cn = Name of your organization
ca
cert_signing_key

где "Name of your organization" - название вашей компании

3.Подпишем сертификат с добавлением информации из файла "ca.info" с помощью следующей команды:

$ certtool --generate-self-signed --load-privkey cakey.pem \
--template ca.info --outfile cacert.pem

На выходе должно получится отчет о подписи сертификата следующего вида:
Generating a self signed certificate...
X.509 Certificate Information:
    Version: 3
    Serial Number (hex): 50ffbddd
    Validity:
        Not Before: Wed Jan 23 10:39:25 UTC 2013
        Not After: Thu Jan 23 10:39:25 UTC 2014
    Subject: CN=Umvirt.Org
    Subject Public Key Algorithm: RSA
    Certificate Security Level: Normal
        Modulus (bits 2432):
            00:c8:d9:c4:99:e6:7a:3f:20:ac:df:ff:f6:1c:55:f2
            4c:9b:c0:ed:9e:79:63:c9:57:a4:73:fb:38:48:d3:8a
            29:85:77:ef:01:41:2a:71:ff:d9:0d:62:79:ee:d7:cb
            22:aa:1d:f5:10:24:8f:38:d8:79:3c:37:c2:16:8f:d7
            bb:f5:32:c7:47:87:b5:7e:e9:15:79:e5:a6:6b:bc:1c
            17:cc:68:e5:86:25:18:46:9e:7a:c1:9e:c4:4b:aa:33
            26:67:f0:51:e7:84:46:e1:4b:3f:c6:29:f6:23:f2:ef
            94:27:93:96:0a:aa:4c:a1:90:ab:bb:f1:2f:46:a2:1f
            76:1d:26:05:c9:3e:c9:30:3c:b6:0c:72:c6:fa:ec:b8
            a7:e7:6c:71:55:50:11:30:65:ec:7d:ea:15:2f:7d:86
            bb:d2:f4:cc:70:23:48:f5:e2:5f:fc:5c:db:05:4e:2e
            2e:c0:f8:1f:6b:41:9a:b9:76:fe:0f:29:3c:c4:a7:af
            a1:1e:2b:16:66:17:b0:b7:5d:89:21:d5:8b:9f:c1:1b
            af:ed:b6:83:e4:71:e0:21:29:7d:e8:80:91:b8:c9:a0
            8c:2d:64:71:e9:ca:bf:27:90:d6:1d:b5:e2:8a:cc:80
            c5:44:9c:de:a1:0a:99:c5:c5:fe:c8:7b:ba:90:ca:c8
            4c:92:d7:fe:a1:6b:ff:29:2b:f0:70:01:6c:88:ff:2d
            bd:d1:67:f6:a4:e7:99:6b:3f:5b:8d:cc:9c:6e:7b:75
            9e:06:19:5b:f0:88:d8:af:06:3f:00:25:ec:8f:9f:71
            e7
        Exponent (bits 24):
            01:00:01
    Extensions:
        Basic Constraints (critical):
            Certificate Authority (CA): TRUE
        Key Usage (critical):
            Certificate signing.
        Subject Key Identifier (not critical):
            88aea5e4afa72d354b63318b284694c34e603bbd
Other Information:
    Public Key Id:
        88aea5e4afa72d354b63318b284694c34e603bbd
 
 
 
Signing certificate...

Если в каталоге обнаружите файл cacert.pem значит вы успешно подписали сертификат УЦ.

Сертификат сервера 

После того как был создан и подписан сертификат УЦ, создадим сертификат сервера.

0. Переходим в каталог сертификата сервера
Выходим из каталога CA (если нужно)

$ cd ..

Создаем и переходим в каталог сертификата сервера

$ mkdir server
$ cd server

1. Создадим приватный ключ с помощью команды:

$ certtool --generate-privkey > serverkey.pem

2. Добавим информацию в сертификат. Для этого создадим текстовым файл server.info со следующим содержимым (важно только поле CN, которое указывает имя сервера):
organization = Name of your organization
cn = Server Name 
tls_www_server
encryption_key
signing_key

где "Name of your organization" - название вашей компании
"Server Name" - сетевое имя сервера (определяется через файлы "hostname", "hosts", а также с помощью службы DNS)

3. Подпишем сертификат с добавлением информации из файла server.info с помощью следующей команды:

$ certtool --generate-certificate --load-privkey serverkey.pem \
  --load-ca-certificate ../CA/cacert.pem --load-ca-privkey ../CA/cakey.pem \
  --template server.info --outfile servercert.pem

На выходе должно получится отчет о подписи сертификата следующего вида:
Generating a signed certificate...
X.509 Certificate Information:
    Version: 3
    Serial Number (hex): 50ffc472
    Validity:
        Not Before: Wed Jan 23 11:07:30 UTC 2013
        Not After: Thu Jan 23 11:07:30 UTC 2014
    Subject: O=Umvirt.Org,CN=lab
    Subject Public Key Algorithm: RSA
    Certificate Security Level: Normal
        Modulus (bits 2432):
            00:cd:c1:91:af:a9:a8:49:c1:e7:95:6b:c6:87:e8:28
            74:ab:85:fe:1e:27:11:50:6a:9b:6c:72:27:6a:c4:af
            df:b1:98:36:a8:be:75:ca:f1:f3:22:b6:56:f5:c4:fc
            26:b6:f9:d6:fd:05:34:57:7a:1c:ed:fc:a1:37:91:c1
            ce:ae:bc:2b:8e:6c:b4:ff:be:bd:ea:5b:d4:87:f9:ae
            7e:14:c2:9f:bb:68:4f:06:d4:16:e8:a4:76:8d:4b:11
            11:c6:e9:c5:fa:ee:91:03:3e:2d:fc:06:19:dd:01:ca
            80:92:d6:75:cb:52:ac:6b:dd:d7:79:c8:b6:05:00:99
            95:a1:24:07:68:80:0f:4a:ea:d1:5f:63:1b:98:df:88
            7e:a8:a6:10:52:c4:66:2a:98:e6:50:e8:50:ce:a4:77
            c0:57:80:50:21:5e:ea:b1:bc:00:70:20:21:38:23:9f
            84:a6:53:b9:8b:8f:f9:87:0e:7e:3b:4d:46:7b:e3:35
            86:eb:bd:18:e2:02:9b:7c:50:05:40:86:5d:cf:e0:f3
            70:a9:6a:77:64:23:44:66:4c:d0:b9:1d:27:18:22:74
            30:7f:b3:f9:03:b8:1e:9a:6d:fb:ef:bd:02:a5:60:3c
            0c:52:10:5b:83:ab:6f:74:b0:46:12:6d:d9:fd:24:63
            d5:27:26:dc:de:77:72:97:a6:ec:50:7d:33:f6:46:7e
            56:28:74:ba:a9:51:5f:d7:c9:f9:0c:1d:38:fc:a8:0a
            a1:22:16:f7:7d:89:d8:c0:5e:15:40:33:c0:d1:23:e8
            c9
        Exponent (bits 24):
            01:00:01
    Extensions:
        Basic Constraints (critical):
            Certificate Authority (CA): FALSE
        Key Purpose (not critical):
            TLS WWW Server.
        Key Usage (critical):
            Digital signature.
            Key encipherment.
        Subject Key Identifier (not critical):
            d51c21eeca9debca30cb34d3b2c86f01c06939ad
        Authority Key Identifier (not critical):
            88aea5e4afa72d354b63318b284694c34e603bbd
Other Information:
    Public Key Id:
        d51c21eeca9debca30cb34d3b2c86f01c06939ad
 
 
 
Signing certificate...

Если в каталоге обнаружите файл servercert.pem значит вы успешно подписали сертификат сервера.

Сертификат клиента

0. Переходим в каталог  сертификата клиента
Выходим из каталога CA (если нужно)

$ cd ..

Создаем и переходим в каталог сертификата клиента

$ mkdir client
$ cd client

1. Создадим приватный ключ с помощью команды:

$ certtool --generate-privkey > clientkey.pem

2.2. Добавим информацию в сертификат. Для этого создадим текстовым файл client.info со следующим содержимым:
country = Country code
state = State
locality = Locality
organization = Name of your organization
cn = Username
tls_www_client
encryption_key
signing_key

где где "Name of your organization" - название вашей компании
"Country code" - двухбуквенный код страны
"State" - Регион
"Locality" - Имя населенного пункта
"Username" - Имя пользователя

3. Подпишем сертификат с добавлением информации из файла client.info с помощью следующей команды:

#certtool --generate-certificate --load-privkey clientkey.pem   \
--load-ca-certificate ../CA/cacert.pem --load-ca-privkey ../CA/cakey.pem   \
--template client.info --outfile clientcert.pem

На выходе должно получится отчет о подписи сертификата следующего вида:
Generating a signed certificate...
X.509 Certificate Information:
    Version: 3
    Serial Number (hex): 50ffc804
    Validity:
        Not Before: Wed Jan 23 11:22:44 UTC 2013
        Not After: Thu Jan 23 11:22:44 UTC 2014
    Subject: C=RU,O=Umvirt.Org,L=Chita,ST=Zabaikalye,CN=boris
    Subject Public Key Algorithm: RSA
    Certificate Security Level: Normal
        Modulus (bits 2432):
            00:d8:b9:a5:f6:e5:d5:82:39:2d:4c:c5:db:90:18:6b
            d9:76:c3:19:2a:26:e8:19:2c:93:e2:7c:74:13:ba:a2
            68:b3:01:7f:05:4a:20:6a:14:92:41:f0:cd:b0:90:5e
            f4:14:42:7d:ea:86:98:31:c8:51:2f:6b:c1:bf:1c:29
            09:ee:8d:52:a8:f5:b1:f6:23:c2:64:29:57:a4:a8:1f
            8b:66:ed:0c:ba:5e:d1:2d:7e:e4:85:c1:38:02:98:65
            09:bf:78:16:6f:24:bc:c7:89:7c:04:18:71:ad:03:51
            e0:78:83:bd:91:42:4a:a1:5b:3f:fd:28:ed:e0:96:39
            61:e6:77:2f:82:91:d1:3b:ca:39:df:ad:d1:51:e9:dd
            5b:41:e5:c1:aa:75:c5:0b:b4:57:bc:be:46:92:19:83
            49:29:be:29:54:5c:ff:6b:92:96:7b:fb:2d:bf:ee:ab
            c3:84:f9:2e:6e:5c:51:a2:80:19:c7:06:40:1d:5a:ce
            04:17:7e:f3:34:ad:ac:6b:80:eb:75:ea:62:a7:78:8a
            d1:74:a6:92:5c:31:11:93:14:68:40:50:76:0b:a5:4d
            d6:d6:c8:9f:6a:2c:65:3b:ac:8d:1a:dc:aa:51:24:27
            99:e9:53:b7:05:17:36:8f:3e:65:80:f3:6e:48:0a:bb
            b1:fe:fa:29:60:71:82:6e:d0:a1:16:98:1a:67:67:02
            bb:83:95:a2:c3:c6:08:ee:f9:5b:c2:b8:21:10:5c:87
            33:c0:d2:78:76:32:c6:db:87:78:ab:98:93:36:41:aa
            ef
        Exponent (bits 24):
            01:00:01
    Extensions:
        Basic Constraints (critical):
            Certificate Authority (CA): FALSE
        Key Purpose (not critical):
            TLS WWW Client.
        Key Usage (critical):
            Digital signature.
            Key encipherment.
        Subject Key Identifier (not critical):
            558c2dc92c638558075a82af4c7820adf8469927
        Authority Key Identifier (not critical):
            88aea5e4afa72d354b63318b284694c34e603bbd
Other Information:
    Public Key Id:
        558c2dc92c638558075a82af4c7820adf8469927
 
 
 
Signing certificate...

Если в каталоге обнаружите файл clientcert.pem значит вы успешно подписали сертификат клиента.

Итог создания сертификатов

В результате создания сертификатов должны получится файлы в следующей структуре:

<каталог с сертификатами>/
    CA/
        cacert.pem  
        ca.info
        cakey.pem
    client/
        clientcert.pem  
        client.info  
        clientkey.pem
    server/
        servercert.pem  
        server.info  
        serverkey.pem

Чтобы структура файлов *.info была понятной, во вложениях приведены примеры файлов.

Подключение сертификатов

Рассмотрим подключение сертификатов на примере libvirt, spice и vnc.

Подключение сертификатов к libvirt

Для того чтобы сервер libvirt стал работать с сертификатами нужно разместить файлы сертификатов на сервере в следующей структуре:

/etc/pki/
    CA/
        cacert.pem
    libvirt/
        private/
            serverkey.pem
        servercert.pem 
   

Чтобы клиент libvirt смог работать с сервером нужно разместить файлы сертификатов на компьютере клиента в следующей структуре:

/etc/pki/
    CA/
        cacert.pem
    libvirt/
        private/
            clientkey.pem
        clientcert.pem

Для того чтобы отладить процесс работы с сертификатами рекомендуется запускать libvirt в ручную, чтобы получить полную информацию о обработке сертификатов. Для того чтобы приступить к запуску libvirt в ручную необходимо сначала остановить службу libvirt-bin:

# service libvirt-bin stop

Затем запускаем демона libvirtd с активацией встроенного TCP-сервера и режима отладки:

# libvirtd --listen --verbose

Со стороны клиента подключаемся к libvirt из консоли выполняя команду

$ virsh -c qemu+tls://boris@lab/system list --all

Если соединение прошло успешно и вы получили список виртуальных машин, приступаем к настройке автоматического запуска libvirtd. Для этого в файле "/etc/default/libvirt-bin" заменяем строку:

libvirtd_opts="-d"

на строку:

libvirtd_opts="-d --listen"

Подключение сертификатов к spice

Для того чтобы spice-сервер стал работать с сертификатами нужно разместить файлы сертификатов на сервере в следующей структуре:

/etc/pki/
    libvirt-spice/
        ca-cert.pem  
        server-cert.pem  
        server-key.pem

Чтобы spice-клиент смог работать с сервером нужно разместить файлы сертификатов на компьютере клиента в следующей структуре:

~/.spicec/
    spice_truststore.pem

где spice_truststore.pem - это переименованный файл ca-cert.pem

На сервере в файле настроек /etc/libvirt/qemu.conf прописываем следующие параметры:

spice_tls = 1
spice_tls_x509_cert_dir = "/etc/pki/libvirt-spice"

Перезагружаем демона libvirt-bin

# service libvirt-bin restart
 
В настройках виртуальной машины с помощью virt-manager или virsh edit создаем TLS-порт.
 
На клиенте подключаемся к виртуальной машине на сервере lab через tls-порт 5916 следующим образом:

Spicec:

$ spicec -h lab -s 5916

Spicy:

$ spicy -h lab -s 5916

Remote-Viewer (из пакета virt-viewer):

$ remote-viewer spice://lab?tls-port=5916;

Подключение сертификатов к vnc 

Для того чтобы vnc-сервер стал работать с сертификатами нужно разместить файлы сертификатов на сервере в следующей структуре:

/etc/pki/
    libvirt-vnc/
        ca-cert.pem  
        server-cert.pem  
        server-key.pem

Чтобы spice-клиент смог работать с сервером нужно разместить файлы сертификатов на компьютере клиента в следующей структуре:

На одного клиента:

~/.pki/
    CA/     
        ca-cert.pem
    vinagre/
        private/
            clientkey.pem
        clientcert.pem


На всех пользователей:

/etc/pki/
    CA/     
        ca-cert.pem
    vinagre/
        private/
            clientkey.pem
        clientcert.pem
    libvirt/
        private/
            clientkey.pem
        clientcert.pem

На сервере в файле настроек /etc/libvirt/qemu.conf прописываем следующие параметры:
vnc_tls = 1
vnc_tls_x509_cert_dir = "/etc/pki/libvirt-vnc"
vnc_tls_x509_verify = 1

 
Перезагружаем демона libvirt-bin

# service libvirt-bin restart
 
На клиенте подключаемся к виртуальной машине на сервере lab через tls-порт 5915 следующим образом:

Vinagre:

$ vinagre lab:5915

Virt-manager

$ virt-viewer -c qemu+tls://lab/system guest

Remote-viewer

$ remote-viewer vnc://lab:5915
 
Дополнительная информация о подключении VNC-клиентов через TLS на странице: 

http://wiki.libvirt.org/page/VNCTLSSetup#VNC_clients_known_to_work 

Исправление ошибок

Libvirt: Certificate check failed 

В случае если во время подключения стороны клиента и выполнения команды

$ virsh -c qemu+tls://boris@lab/system list --all

Возникает ошибка вида:

2013-01-23 12:04:54.686+0000: 4954: info : libvirt version: 0.9.13
2013-01-23 12:04:54.686+0000: 4954: warning : virNetTLSContextCheckCertificate:1093 : Certificate check failed Certificate [session] owner does not match the hostname 127.0.0.1
ошибка: Не удалось подключиться к гипервизору
ошибка: сбой аутентификации: Failed to verify peer's certificate

Это значит: 

  1. Вы не правильно подключаетесь к серверу, вместо имени указанного в сертификате вы использете другое имя или IP-адрес.
  2. Имя сервера не резолвится (не преобразуется в IP-адрес) через службу DNS или файл hosts

Источники


26 августа 2017 года, суббота, Автор: ООО МааСофтваре Помощь

Рейтинг:

Назад  Наверх

/ Помощь
Пользователь
Новости
[...] Архив новостей.
Новое на сайте
Страницы:
Каталог:
Новости:
Другие ресурсы
Copyright © 2011-2017 ООО МааСофтваре   
Мы принимаем Яндекс.Деньги Мы принимаем переводы Сбербанка России Банковский перевод Способы и порядок оплаты
Посетителей сегодня: 1, всего: 25, максимально: 5, начиная с 28.08.2017, вы просматриваете эту страницу 1 раз(а). Заходите ещё!!!