mirror of
				https://github.com/mail-in-a-box/mailinabox.git
				synced 2025-10-30 18:50:53 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			122 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <style>
 | |
| </style>
 | |
| 
 | |
| <h2>SSL Certificates</h2>
 | |
| 
 | |
| <h3>Certificate Status</h3>
 | |
| 
 | |
| 
 | |
| <table id="ssl_domains" class="table" style="margin-bottom: 2em; width: auto;">
 | |
|   <thead>
 | |
|     <tr>
 | |
|       <th>Domain</th>
 | |
|       <th>Certificate Status</th>
 | |
|       <th>Actions</th>
 | |
|     </tr>
 | |
|   </thead>
 | |
|   <tbody>
 | |
|   </tbody>
 | |
| </table>
 | |
| 
 | |
| <p>A multi-domain or wildcard certificate will be automatically applied to any domains it is valid for.</p>
 | |
| 
 | |
| <h3 id="ssl_install_header">Install SSL Certificate</h3>
 | |
| 
 | |
| <p>There are many places where you can get a free or cheap SSL certificate. We recommend <a href="https://www.namecheap.com/security/ssl-certificates/domain-validation.aspx">Namecheap’s $9 certificate</a>, <a href="https://www.startssl.com/">StartSSL’s free express lane</a> or <a href="https://buy.wosign.com/free/">WoSign’s free SSL</a></a>.</p>
 | |
| 
 | |
| <p>Which domain are you getting an SSL certificate for?</p>
 | |
| 
 | |
| <p><select id="ssldomain" onchange="show_csr()" class="form-control" style="width: auto"></select></p>
 | |
| 
 | |
| <div id="csr_info" style="display: none">
 | |
|   <p>You will need to provide the SSL certificate provider this Certificate Signing Request (CSR):</p>
 | |
| 
 | |
|   <pre id="ssl_csr"></pre>
 | |
| 
 | |
|   <p><small>The CSR is safe to share. It can only be used in combination with a secret key stored on this machine.</small></p>
 | |
| 
 | |
|   <p>The SSL certificate provider will then provide you with an SSL certificate. They may also provide you with an intermediate chain. Paste each separately into the boxes below:</p>
 | |
| 
 | |
|   <p style="margin-bottom: .5em">SSL certificate:</p>
 | |
|   <p><textarea id="ssl_paste_cert" class="form-control" style="max-width: 40em; height: 8em" placeholder="-----BEGIN CERTIFICATE-----
stuff here
-----END CERTIFICATE-----"></textarea></p>
 | |
| 
 | |
|   <p style="margin-bottom: .5em">SSL intermediate chain (if provided):</p>
 | |
|   <p><textarea id="ssl_paste_chain" class="form-control" style="max-width: 40em; height: 8em" placeholder="-----BEGIN CERTIFICATE-----
stuff here
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
more stuff here
-----END CERTIFICATE-----"></textarea></p>
 | |
| 
 | |
|   <p>After you paste in the information, click the install button.</p>
 | |
| 
 | |
|   <button class="btn-primary" onclick="install_cert()">Install</button>
 | |
| </div>
 | |
| 
 | |
| <script>
 | |
| function show_ssl() {
 | |
|  api(
 | |
|     "/web/domains",
 | |
|     "GET",
 | |
|     {
 | |
|     },
 | |
|     function(domains) {
 | |
|       var tb = $('#ssl_domains tbody');
 | |
|       tb.text('');
 | |
|       $('#ssldomain').html('<option value="">(select)</option>');
 | |
| 
 | |
|       for (var i = 0; i < domains.length; i++) {
 | |
|         var row = $("<tr><th class='domain'><a href=''></a></th><td class='status'></td> <td class='actions'><a href='#' onclick='return ssl_install(this);' class='btn btn-xs'>Install Certificate</a></td></tr>");
 | |
|         tb.append(row);
 | |
|         row.attr('data-domain', domains[i].domain);
 | |
|         row.find('.domain a').text(domains[i].domain);
 | |
|         row.find('.domain a').attr('href', 'https://' + domains[i].domain);
 | |
|         row.addClass("text-" + domains[i].ssl_certificate[0]);
 | |
|         row.find('.status').text(domains[i].ssl_certificate[1]);
 | |
|         if (domains[i].ssl_certificate[0] == "success") {
 | |
|           row.find('.actions a').addClass('btn-default').text('Replace Certificate');
 | |
|         } else {
 | |
|           row.find('.actions a').addClass('btn-primary').text('Install Certificate');
 | |
|         }
 | |
| 
 | |
|         $('#ssldomain').append($('<option>').text(domains[i].domain));
 | |
|       }
 | |
|     });
 | |
| }
 | |
| 
 | |
| function ssl_install(elem) {
 | |
|   var domain = $(elem).parents('tr').attr('data-domain');
 | |
|   $('#ssldomain').val(domain);
 | |
|   $('#csr_info').slideDown();
 | |
|   $('#ssl_csr').text('Loading...');
 | |
|   show_csr();
 | |
|   $('html, body').animate({ scrollTop: $('#ssl_install_header').offset().top - $('.navbar-fixed-top').height() - 20 })
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| function show_csr() {
 | |
|  api(
 | |
|     "/ssl/csr/" + $('#ssldomain').val(),
 | |
|     "POST",
 | |
|     {
 | |
|     },
 | |
|     function(data) {
 | |
|       $('#ssl_csr').text(data);
 | |
|     });
 | |
| }
 | |
| 
 | |
| function install_cert() {
 | |
|  api(
 | |
|     "/ssl/install",
 | |
|     "POST",
 | |
|     {
 | |
|       domain: $('#ssldomain').val(),
 | |
|       cert: $('#ssl_paste_cert').val(),
 | |
|       chain: $('#ssl_paste_chain').val()
 | |
|     },
 | |
|     function(status) {
 | |
|       if (/^OK($|\n)/.test(status)) {
 | |
|         console.log(status)
 | |
|         show_modal_error("SSL Certificate Installation", "Certificate has been installed. Check that you have no connection problems to the domain.", function() { show_ssl(); $('#csr_info').slideUp(); });
 | |
|       } else {
 | |
|         show_modal_error("SSL Certificate Installation", status);
 | |
|       }
 | |
|     });
 | |
| }
 | |
| </script>
 |