La creación de Usuario, Certificado y Firma de CSR para el Gestor de Certificados Lemur
Tras la instalación satisfactoria del gestor de certificados Lemur, se integró con él la Autoridad de Certificación Raíz (CA)CFSSL. Tras el paso de integración, se creó la CA local utilizando el plugin CFSSL en el lemur. Así, CFSSL es la CA raíz en nuestro caso. Como sabemos que el gestor de certificados de Lemur está basado en Python, en este artículo nos centraremos en crear diferentes scripts de Python que serán útiles para el desarrollo posterior del proyecto. En este artículo, realizaremos los siguientes scripts para interactuar con Lemur utilizando el terminal.
- Creación de la Autoridad usando CFSSL en la GUI de Lemur. Esta Autoridad CFSSL se utilizará en nuestros scripts para generar el certificado. He establecido el título «myCA» de la autoridad CFSSL en la GUI. Este título «myCA» se utilizará en la generación de certificados de Lemur.
Usando el plugin CFSSL
«miCA» aparece en la lista después de la creación.
- Usando el script de Python para crear un usuario con el rol de «Administrador» usando la API de Lemur y la solicitud se envía en formato JSON. (verifica el resultado desde la página de usuarios de la GUI de Lemur).
- Creación de un certificado para el propietario y el usuario especificados (verifica el resultado desde la página de certificados de la GUI de Lemur).
- Generación de claves privadas/públicas mediante Openssl en el terminal (a continuación se dan los comandos para generar el par de claves y luego el CSR) y
- a continuación, utiliza el CSR (cat el archivo csr) en el script para generar el certificado de la autoridad personalizada definida.
NOTA:
Todos los scripts de python enviarán una solicitud en formato JSON a la plataforma Lemur, así que cambia los parámetros en los scripts según tus necesidades. (como tu nombre de autoridad CFSSL, nombre de usuario, etc.)
Scripts
En el siguiente script, la solicitud json se enviará a 192.168.1.7 (dirección IP del Lemur y de la CA raíz CFSSL). Después de la autenticación exitosa, se enviará otra solicitud para la creación del nuevo usuario.
1. crear_usuario_usando_rol_admin.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":"[email protected]","active": "true", "roles": [{'id':1}or{'name': 'myRole'}]}),headers=Auth)
print test.json()
--------------------------------------------------------------------------------------------------
En el siguiente script, se envía una solicitud a la autoridad «myCA» para generar un nuevo certificado para el usuario «aa».
2. crear_certificado_por_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": "[email protected]","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": "[email protected]"}, "roles": [{"id": 1, "description": "admin role", "name": "[email protected]"}],"validityStart": "2018-11-11T04:19:48.000Z","organizationalUnit": "Operations"}),headers=Auth)
print cert_req.json() --------------------------------------------------------------------------------------------------
El objetivo del siguiente script es firmar el CSR de la autoridad de certificación CFSSL. Los comandos necesarios de OpenSSL se dan arriba para generar el csr para el script.
El siguiente comando se utilizará para firmar el CSR personalizado. Esta funcionalidad no se proporciona en la GUI de Lemur para firmar el CSR utilizando nuestra CA configurada localmente.
comando de generación de pares de claves:
openssl genrsa -out test.key 2048
Creación del CSR utilizando el test.key generado anteriormente:
openssl req -new -sha256 -key test.key -out test.csr
Ahora utiliza el comando «cat» para ver el contenido de test.csr y cópialo en el script para generar el certificado en el CSR generado por el usuario. Un consejo importante sobre el uso del CSR en el script es que elimines /r y utilices /n excepto entre las etiquetas de inicio/parada del CSR.
3. crear_certificado_utilizando_el_ccsr_local.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": "[email protected]","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()
--------------------------------------------------------------------------------------------------
Conclusión
En este artículo se han escrito diferentes scripts en python para interactuar con el proyecto de gestor de certificados Lemur. Estos scripts serán útiles para que los desarrolladores puedan utilizarlo desde la CLI.