Add PKCS#12 creation
This commit is contained in:
		
							parent
							
								
									5c3f0ea942
								
							
						
					
					
						commit
						d0e41cc9a9
					
				
					 1 changed files with 28 additions and 2 deletions
				
			
		|  | @ -23,6 +23,11 @@ | |||
|                     <small id="nameHelp" class="form-text text-muted">Please input your name as it should be added to | ||||
|                         your certificate</small> | ||||
|                 </div> | ||||
|                 <div class="form-group"> | ||||
|                     <label for="passwordInput">Password for your client certificate</label> | ||||
|                     <input type="password" class="form-control" id="passwordInput" aria-describedby="nameHelp" required | ||||
|                            minlength="8"> | ||||
|                 </div> | ||||
|                 <fieldset class="form-group"> | ||||
|                     <legend>RSA Key Size</legend> | ||||
|                     <div class="form-check"> | ||||
|  | @ -53,10 +58,16 @@ | |||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="row"> | ||||
|         <div class="col-12"> | ||||
|             <div id="result"> | ||||
|                 <button type="button" disabled id="send-button" class="btn btn-default disabled">Send signing request</button> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <pre id="key"></pre> | ||||
|     <pre id="csr"></pre> | ||||
|     <pre id="crt"></pre> | ||||
|     <button type="button" disabled id="send-button" class="btn btn-default disabled">Send signing request</button> | ||||
| </div> | ||||
| <script src="../public/js/jquery.slim.min.js"></script> | ||||
| <script src="../public/js/forge.all.min.js"></script> | ||||
|  | @ -82,6 +93,7 @@ | |||
|         const keyElement = document.getElementById('key'); | ||||
|         document.getElementById('csr-form').onsubmit = function (event) { | ||||
|             const subject = event.target["nameInput"].value; | ||||
|             const password = event.target["passwordInput"].value; | ||||
|             const keySize = parseInt(event.target["keySize"].value); | ||||
|             if (isNaN(keySize)) { | ||||
|                 return false; | ||||
|  | @ -127,8 +139,22 @@ | |||
|                                 .then(data => { | ||||
|                                     console.log(data); | ||||
|                                     document.getElementById("crt").innerHTML = data["certificate"]; | ||||
|                                     const certificate = forge.pki.certificateFromPem(data["certificate"]); | ||||
|                                     // browsers have trouble importing anything but 3des encrypted PKCS#12 | ||||
|                                     const p12asn1 = forge.pkcs12.toPkcs12Asn1( | ||||
|                                         keys.privateKey, certificate, password, | ||||
|                                         {algorithm: '3des'} | ||||
|                                     ); | ||||
|                                     const p12Der = forge.asn1.toDer(p12asn1).getBytes(); | ||||
|                                     const p12B64 = forge.util.encode64(p12Der); | ||||
| 
 | ||||
|                                     const a = document.createElement('a'); | ||||
|                                     a.download = 'client_certificate.p12'; | ||||
|                                     a.setAttribute('href', 'data:application/x-pkcs12;base64,' + p12B64); | ||||
|                                     a.appendChild(document.createTextNode("Download")); | ||||
|                                     document.getElementById('result').appendChild(a); | ||||
|                                 }); | ||||
|                         }) | ||||
|                         }); | ||||
|                         sendButton.removeAttribute("disabled"); | ||||
|                         sendButton.classList.remove("disabled"); | ||||
|                     } | ||||
|  |  | |||
		Reference in a new issue