Автоматизируйте создание SSL в Fabric (Python)

Я использую Fabric для автоматизации создания SSL, но когда я запускаю что-то вроде

local('openssl genrsa  -out /etc/ssl/'+hostname+'/'+hostname+'.key 2048')

он подсказывает мне страну, штат, адрес электронной почты и т. д. Могу ли я что-нибудь сделать (возможно, с помощью openssl.cnf?), чтобы предотвратить необходимость ввода пользователем этих подсказок, или люди обычно просто взламывают его, используя что-то вроде ожидать?

Обновление:

Если я поставлю prompt=no в свой openssl.cnf, cd в /ssdhome/development/server, то запущу:

sudo openssl req -new -key './server.key' -out './server.csr' -config='./openssl.cnf'

openssl выводит информацию help вместо выполнения вышеуказанной команды. Где я ошибся?

Обновление 2: -config не должен иметь знак '=', а пробел. Решено. Также связан с этой копией моего openssl.cnf, чтобы заставить его работать:

https://help.ubuntu.com/community/OpenSSL


person mh00h    schedule 21.07.2013    source источник
comment
Я думаю, что это актуально: stackoverflow.com/questions/8075274/   -  person alecxe    schedule 21.07.2013


Ответы (2)


См. Как автоматически отвечать на запросы с помощью python Fabric?

from ilogue.fexpect import expect, expecting, run

def sample():

    private_key = "password"
    hostname = "ubuntu"
    output_dir = '/etc/ssl/' + hostname
    prompts = []
    prompts += expect('Enter pass phrase for private.key:',private_key)
    prompts += expect('Verifying - Enter pass phrase for private.key:private_key',private_key)
    prompts += expect('Enter pass phrase for %s/server.key:' % output_dir, private_key)
    prompts += expect('Country Name \(2 letter code\) \[AU\]:','AU')
    prompts += expect('State or Province Name \(full name\) \[Some-State\]:','State')
    prompts += expect('Locality Name \(eg, city\) \[\]:','City')
    prompts += expect('Organization Name \(eg, company\) \[Internet Widgits Pty Ltd\]:','Company')
    prompts += expect('Organizational Unit Name \(eg, section\) \[\]:','Section')
    prompts += expect('Common Name \(e.g. server FQDN or YOUR name\) \[\]:','FQDN')
    prompts += expect('Email Address \[\]:','[email protected]')
    prompts += expect('A challenge password \[\]:','challenge_password')
    prompts += expect('An optional company name \[\]:','optional_company')

    with expecting(prompts):
        run('openssl genrsa -des3 -out %s/server.key 2048' % output_dir)
        run('openssl req -new -key %s/server.key -out %s/server.csr' % (output_dir, output_dir))

# fab sample -H localhost

регулярное выражение применяется к expect(), вам нужно экранировать [, ], (, )...

person Yuichiro    schedule 22.07.2013

Использован https://help.ubuntu.com/community/OpenSSL, чтобы заставить prompt=no прекратить выдавать ошибки и -config ./openssl.cnf для автоматизации подсказок благодаря пользователю alecxe.

person mh00h    schedule 22.07.2013