Bacula — обновляем самоподписные ssl сертификаты

После обновления openssl отвалились бекапы в бакуле, поглядев что там в логах, увидел что матерится на TLS, что мол неверные сертификаты и прочее … прочее. И еще чтото про то что простроченные. Не долго думая, решил просто перегенерить и не разбираться. Тем более что дело то пяти минут.
Итак, как это делается? Просто!
Создадим папку где будут храниться сертификаты:

root@gw:~# mkdir /usr/local/etc/bacula-ssl

Перейдем в нее:

root@gw:~# cd /usr/local/etc/bacula-ssl

Создадим необходимые для генерации сертификатов файлы:

root@gw:/usr/local/etc/bacula-ssl# touch ./index.txt && echo "01" > ./serial

Скопируем дефолтный конфиг openssl:

root@gw:/usr/local/etc/bacula-ssl# cp /etc/ssl/openssl.cnf .

Для упрощения создания сертификатов я заполнил своей инфой в конфиге все строчки с суффиксом _default. В принципе это не обязательно, но если этого не сделать то придется вручную много одинаковой инфы вводить, что лениво 🙂 У меня данный конфиг выглядел после моих правок так:

HOME                    = .
RANDFILE                = $ENV::HOME/.rnd
oid_section             = new_oids
[ new_oids ]
[ ca ]
default_ca      = CA_default            # The default ca section
[ CA_default ]
dir             = .             # Where everything is kept
certs           = $dir/certs            # Where the issued certs are kept
crl_dir         = $dir/crl              # Where the issued crl are kept
database        = $dir/index.txt        # database index file.
                                        # several ctificates with same subject.
new_certs_dir   = $dir          # default place for new certs.
certificate     = $dir/ca.crt   # The CA certificate
serial          = $dir/serial           # The current serial number
crlnumber       = $dir/crlnumber        # the current crl number
                                        # must be commented out to leave a V1 CRL
crl             = $dir/crl.pem          # The current CRL
private_key     = $dir/ca.key# The private key
RANDFILE        = $dir/private/.rand    # private random number file
x509_extensions = usr_cert              # The extentions to add to the cert
name_opt        = ca_default            # Subject Name options
cert_opt        = ca_default            # Certificate field options
default_days    = 365                   # how long to certify for
default_crl_days= 365                   # how long before next CRL
default_md      = sha1                  # which md to use.
preserve        = no                    # keep passed DN ordering
policy          = policy_match
[ policy_match ]
countryName             = match
stateOrProvinceName     = match
organizationName        = match
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional
[ policy_anything ]
countryName             = optional
stateOrProvinceName     = optional
localityName            = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional
[ req ]
default_bits            = 1024
default_keyfile         = privkey.pem
distinguished_name      = req_distinguished_name
attributes              = req_attributes
x509_extensions = v3_ca # The extentions to add to the self signed cert
string_mask = nombstr
[ req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = UA
countryName_min                 = 2
countryName_max                 = 2
stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = Kievskaya
localityName                    = Locality Name (eg, city)
localityName_default            = Kiev
0.organizationName              = Organization Name (eg, company)
0.organizationName_default      = CA
organizationalUnitName          = Organizational Unit Name (eg, section)
organizationalUnitName_default  = black
commonName                      = Common Name (eg, YOUR name)
commonName_max                  = 64
emailAddress                    = Email Address
emailAddress_default            = my.email@gmail.com
emailAddress_max                = 64
[ req_attributes ]
challengePassword               = A challenge password
challengePassword_min           = 4
challengePassword_max           = 20
unstructuredName                = An optional company name
[ usr_cert ]
basicConstraints=CA:FALSE
nsComment                       = "OpenSSL Generated Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always
basicConstraints = CA:true
[ crl_ext ]
authorityKeyIdentifier=keyid:always,issuer:always
[ proxy_cert_ext ]
basicConstraints=CA:FALSE
nsComment                       = "OpenSSL Generated Certificate"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always
proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo

Параметров много, напомню еще раз, нас интересуют только те что содержат суффикс _default
Дальше, собственно создаем сертификаты. Сначала конечно же ключ и корневой сертификат, пароль желательно ввести посложнее:

openssl req -config ./openssl.cnf -new -x509 -newkey rsa:2048 -keyout ca.key -out ca.crt -days 365

Генерим запросы на сертификат для всех серверов, в моем случае 3 (dir1, fd1, sd1)
Важно! В процессе генерации не забываем что параметр Common Name (eg, YOUR name) это FQDN сервера для которого данный сертификат генерится.

openssl req -config ./openssl.cnf -new -newkey rsa:2048 -nodes -keyout dir1.key -out dir1.csr
openssl req -config ./openssl.cnf -new -newkey rsa:2048 -nodes -keyout fd1.key -out fd1.csr
openssl req -config ./openssl.cnf -new -newkey rsa:2048 -nodes -keyout sd1.key -out sd1.csr

Подписываем CA сертификатом созданные ранее заросы:

openssl ca -config ./openssl.cnf -out dir1.crt -days 365 -infiles dir1.csr
openssl ca -config ./openssl.cnf -out fd1.crt -days 365 -infiles fd1.csr
openssl ca -config ./openssl.cnf -out sd1.crt -days 365 -infiles sd1.csr

Копируем на сервера их сертификаты + CA сертификат

scp fd1.crt fd1.key ca.crt black_13@diff.org.ua:/home/user

Настраиваем пути в конфигах бакулы, перегружаем сервисы:

service bacula-sd restart
service bacula-dir restart
service bacula-dir restart

Ну и пробуем пользовать!

bconsole

Попозже выложу свои конфиги бакулы, именно с настройкой TLS соединений у меня возникло много трудностей, так как даже официальная дока весьма скупо и туманно описывает процесс настройки.
Удачи!

  1. Комментов пока нет

  1. Март 27th, 2014

Why ask?