diff options
| -rw-r--r-- | sign_csr.py | 23 | 
1 files changed, 12 insertions, 11 deletions
| diff --git a/sign_csr.py b/sign_csr.py index b571455..6e759fa 100644 --- a/sign_csr.py +++ b/sign_csr.py @@ -79,7 +79,7 @@ Exponent\: ([0-9]+)\      test_conf.write("\n\n[ alt_names ]\nsubjectAltName = DNS:" + sni + "\n")      test_conf.flush() -    #Step 5: Generate a self-signed ssl cert with the sni altname +    #Step 6: Generate a self-signed ssl cert with the sni altname      sys.stderr.write("Generating test key for dvsni challenge...\n")      test_crt = tempfile.NamedTemporaryFile(dir=".", prefix="test_", suffix=".crt")      test_crt_name = os.path.basename(test_crt.name) @@ -95,7 +95,7 @@ Exponent\: ([0-9]+)\      proc.wait()      sys.stderr.write("Test key generated!\n") -    #Step 6: Get ready to sign the challenge response +    #Step 7: Get ready to sign the challenge response      msgsig_nonce = os.urandom(16)      msgsig_nonce64 = _b64(msgsig_nonce)      msg = msgsig_nonce + domain + nonce @@ -106,7 +106,7 @@ Exponent\: ([0-9]+)\      msgsig_file = tempfile.NamedTemporaryFile(dir=".", prefix="test_", suffix=".msgsig")      msgsig_file_name = os.path.basename(msgsig_file.name) -    #Step 7: Get ready to sign the certificate request response +    #Step 8: Get ready to sign the certificate request response      dersig_nonce = os.urandom(16)      dersig_nonce64 = _b64(dersig_nonce)      proc = subprocess.Popen(["openssl", "req", "-in", csr, "-outform", "DER"], @@ -120,7 +120,7 @@ Exponent\: ([0-9]+)\      dersig_file = tempfile.NamedTemporaryFile(dir=".", prefix="test_", suffix=".dersig")      dersig_file_name = os.path.basename(dersig_file.name) -    #Step 8: Get the user to sign the request and start the https server +    #Step 9: Get the user to sign the request and start the https server      sys.stderr.write("""  ====================================================  ================USER ACTION REQUIRED================ @@ -173,12 +173,9 @@ ssh -t ubuntu@{} "sudo python -c \\"import BaseHTTPServer, ssl; \\      raw_input("Press Enter when you've run the above commands in a new terminal window...")      sys.stdout = stdout -    #Step 9: Let the CA know you are ready for the challenge +    #Step 10: Let the CA know you are ready for the challenge      msgsig_file.seek(0)      msgsig_in = msgsig_file.read() -    f = open("test.sig", "wb") -    f.write(msgsig_in) -    f.close()      msgsig64 = _b64(msgsig_in)      sys.stderr.write("Sending challenge response...\n")      data = json.dumps({ @@ -205,7 +202,7 @@ ssh -t ubuntu@{} "sudo python -c \\"import BaseHTTPServer, ssl; \\      resp = urllib2.urlopen(CA, data)      result = json.loads(resp.read()) -    #Step 10: Wait for the response giving authorization +    #Step 11: Wait for the response giving authorization      is_done = False      while not is_done:          if result['type'] == "defer": @@ -221,7 +218,7 @@ ssh -t ubuntu@{} "sudo python -c \\"import BaseHTTPServer, ssl; \\              sys.stderr.write("Sending certificate request...\n")              is_done = True -    #Step 11: Request the signed certificate +    #Step 12: Request the signed certificate      proc = subprocess.Popen(["openssl", "req", "-in", csr, "-outform", "DER"],          stdout=subprocess.PIPE, stderr=subprocess.PIPE)      csr_der, err = proc.communicate() @@ -247,19 +244,23 @@ ssh -t ubuntu@{} "sudo python -c \\"import BaseHTTPServer, ssl; \\      result = json.loads(resp.read())      sys.stderr.write("Exporting signed certificate...\n") -    #Step 12: Parse and output the signed certificate! +    #Step 13: Parse the signed certificate      crt_start = "-----BEGIN CERTIFICATE-----\n"      crt_end = "\n-----END CERTIFICATE-----\n"      crt64 = result['certificate']      crt_pem = base64.b64encode(_a64(crt64))      crt_pem = "\n".join(crt_pem[i:i+64] for i in xrange(0, len(crt_pem), 64))      crt_pem = crt_start + crt_pem + crt_end + +    #Step 14: Parse any chained certificates      for chain64 in result.get("chains", []):          chain_pem = base64.b64encode(_a64(chain64))          chain_pem = "\n".join(chain_pem[i:i+64] for i in xrange(0, len(chain_pem), 64))          chain_pem = crt_start + chain_pem + crt_end          crt_pem += chain_pem      sys.stderr.write("Done! Your certificate is signed by the certificate authority!\n") + +    #Step 15: Output the chained, signed certificate!      return crt_pem | 
