После успешной установки менеджера сертификатов Lemur был интегрирован корневой центр сертификации CFSSL (CA).
После этапа интеграции локальный CA был создан с использованием CFSSL-плагина в лемуре.
Таким образом, CFSSL является корневым СА в нашем случае.
Поскольку мы знаем, что менеджер сертификатов Lemur основан на Python, поэтому в этой статье мы сосредоточимся на создании различных скритов python, которые будут полезны для дальнейшей работы в проекте.
В этой статье мы будем выполнять следующие скрипты для взаимодействия с Lemur с использованием терминала.
- Создание полномочий с использованием CFSSL в графическом интерфейсе Lemur. Этот инструмент CFSSL будет использоваться в наших скриптах для создания сертификата. Я установил заголовок «myCA» полномочий CFSSL в графическом интерфейсе. Этот заголовок «myCA» будет использоваться при создании сертификатов в Lemur.
«myCA» отображается в списке после создания.
- Использование скрипта Python для создания пользователя с ролью «Admin» с использованием Lemur API и запрос отправляется в формате JSON. (проверьте результат на странице пользователей графического интерфейса Lemur).
- Создание сертификата для указанного владельца и пользователя (проверьте результат на странице сертификата графического интерфейса lemur).
- создание закрытыъ / открытых ключей с использованием Openssl в терминале (команды приведены ниже для генерации пары ключей, а затем CSR) и
затем используйте CSR (cat csr file) в скрипте для создания сертификата из определенного настраиваемого значения.
Все скрипты python отправят запрос в формате JSON на платформу Lemur, поэтому, пожалуйста, измените параметры в скриптах в соответствии с вашими требованиями. (например, ваше имя CFSSL, имя пользователя и т. д.)
Скрипты
В следующем скрипте запрос json будет отправлен на 192.168.1.7 (IP-адрес корневого CA Lemur и CFSSL).
После успешной проверки подлинности будет отправлен другой запрос для создания нового пользователя.
1. create_user_using_admin_role.py
#!/usr/bin/python import json import requests login = requests.request("POST","http://192.168.1.7/api/1/auth/login",data=json.dumps({'username': "lemur", 'password': "lemur"}),headers={'content-type': 'application/json'}) print login.json() Auth = {'Authorization': 'token %s' %login.json()["token"], 'content-type': 'application/json'} test = requests.request("POST","http://192.168.1.7/api/1/users",data=json.dumps({'username': "aa", 'aaa': "aaa" ,"email":"aaa@gmail.com","active": "true", "roles": [{'id':1}or{'name': 'myRole'}]}),headers=Auth) print test.json() --------------------------------------------------------------------------------------------------
следующем скрипте запрос отправляется в «myCA» для создания нового сертификата для пользователя «aa».
2. create_certifacte_by_lemur.py
#!/usr/bin/python import json import requests ##username/password to login lemur to perform the desired action login = requests.request("POST","http://192.168.1.7/api/1/auth/login",data=json.dumps({'username': "lemur", 'password': "lemur"}),headers={'content-type': 'application/json'}) print login.json() Auth = {'Authorization': 'token %s' %login.json()["token"], 'content-type': 'application/json'} cert_req = requests.request("POST","http://192.168.1.7/api/1/certificates",data=json.dumps({"owner": "aa@example.net","commonName": "aa.example.net","country": "AU","replacements": [{"id": 1 }],"notify": "true","validityEnd": "2026-01-01T08:00:00.000Z", "authority": {"name": "myCA" }, "organization": "test.", "location": "Los Gataaos", "state": "Caldifornia", "user": { "username": "aa","active": "true","email": "aa@example.com"}, "roles": [{"id": 1, "description": "admin role", "name": "aa@example.net"}],"validityStart": "2018-11-11T04:19:48.000Z","organizationalUnit": "Operations"}),headers=Auth) print cert_req.json() --------------------------------------------------------------------------------------------------
Целью следующего скрипта является подписание CSR из центра сертификации CFSSL.
Необходимые команды OpenSSL приведены выше для генерации csr для скрипта.
Следующая команда будет использоваться для подписи пользовательского CSR.
Эта функция не предусмотрена в графическом интерфейсе Lemur для подписи CSR с использованием нашего локально настроенного CA.
команда генерации пары ключей:
openssl genrsa -out test.key 2048
Создание CSR с использованием вышеописанного test.key:
openssl req -new -sha256 -key test.key -out test.csr
Теперь используйте команду «cat», чтобы просмотреть содержимое test.csr и скопировать его в скрипт для создания сертификата на созданной пользователем CSR.
3. create_certificate_using_local_csr.py
#!/usr/bin/python import json import requests ##change username/password here login = requests.request("POST","http://192.168.1.7/api/1/auth/login",data=json.dumps({'username': "lemur", 'password': "lemur"}),headers={'content-type': 'application/json'}) print login.json() Auth = {'Authorization': 'token %s' %login.json()["token"], 'content-type': 'application/json'} #it is working csr_req = requests.request("POST","http://192.168.1.7/api/1/certificates",data=json.dumps({"owner": "aa@example.net","commonName": "aa.eaaxample.net","authority": {"name": "myCA" },"csr":"-----BEGIN CERTIFICATE REQUEST----- \nMIICxzCCAa8CAQAwgYExCzAJBgNVBAYTAkFVMQ0wCwYDVQQIDARQQUtJMRIwEAYD\nVQQHDAlJU0xBTUFCQUQxDTALBgNVBAoMBElJSUkxDDAKBgNVBAsMA0dHRzEQMA4G\nA1UEAwwHdXNlcjEyMzEgMB4GCSqGSIb3DQEJARYRdXNlcjEyM0BnbWFpbC5jb20w\nggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDzzV4H1epwXODPs9AkioTv\nQLRtea12vCbZJhKkH59hWhDMjqNRkh8qc4R9gk83lingdWK+L35OkGNi6DG9zseh\ncVRf68sNpTeFg+eXGRmEdTallBqPd5NS3JlMmXxbLEWrELiw4gPp3JpNAzoYZUxb\n4Uk4ho9EN8Fd1/lGmubvyvkYJ1mbpsK1LfaFohGYu+7nMvU4tn1Av/zyTGcIikVu\nU4UA23jKAMzjlSKdTJH/nmqvMi2wltRtb7DNpI/5HAancrnyEzeXC5IN+sPV/5oh\nxdxCyAkp1kDrWhC2yvoffzipoqEFESWmfFrJ8riTiQZqOIWqW+ZasZtu4GDqm4CL\nAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAH/PKs5kTmMPRW2Icy4Yj7vdzjpaA\n/r1glm0voMR5ytPo0+lXHDTQwt/1ObQvr8FnT2z8iqRvfXiv6WWruLzwEEVWsCFL\ny7RAa+K0wqP23CfxzCy/S4ZwCcR+wQb3UnWui8eMxgU1IBjupCR9kPFhL//aA+lm\njBi5YruBgX7MdlW+AlkuVDljzXm1orFYZFzS7OlybH5jh/B3Z2ygbC++Y24XI3qm\n5IYpsxFbOmrj7y3IXN/990305blCcKhpaG+FMTKhNqkXMYKYsZseIO3xdO4Ufjl/\nqS2jjsE1sFxmKbabhguhTT06oGimT+TbgoYVkc0DWhIdLcrOdxhGsFwdqg==\n-----END CERTIFICATE REQUEST-----"}),headers=Auth) print csr_req.json() --------------------------------------------------------------------------------------------------