2014-10-10 15:49:14 +00:00
< style >
< / style >
2016-01-02 23:01:20 +00:00
< h2 > TLS (SSL) Certificates< / h2 >
2014-10-10 15:49:14 +00:00
2016-01-02 23:22:22 +00:00
< p > A TLS (formerly called SSL) certificate is a cryptographic file that proves to anyone connecting to a web address that the connection is secure between you and the owner of that address.< / p >
2016-01-02 22:53:47 +00:00
2016-01-02 23:22:22 +00:00
< p > You need a TLS certificate for this box’ s hostname ({{hostname}}) and every other domain name and subdomain that this box is hosting a website for (see the list below).< / p >
2016-01-02 22:53:47 +00:00
< h3 > Provision a Certificate< / h3 >
2014-10-10 15:49:14 +00:00
2016-01-02 22:53:47 +00:00
< p > We can provision an SSL certificate for you from < a href = "https://letsencrypt.org/" target = "_blank" > Let’ s Encrypt< / a > , a free SSL certificate provider.< / p >
2014-10-10 15:49:14 +00:00
2016-01-02 22:53:47 +00:00
< p id = "ssl_provision_status" > < / p >
< table id = "ssl_provision_problems" style = "display: none" class = "table" >
< thead >
< tr >
< th > Domain< / th >
< th > Problem< / th >
< / tr >
< / thead >
< tbody >
< / tbody >
< / table >
< h3 > Certificate Status< / h3 >
< table id = "ssl_domains" class = "table" style = "margin-bottom: 2em; width: auto; display: none" >
2014-10-10 15:49:14 +00:00
< thead >
< tr >
< th > Domain< / th >
< th > Certificate Status< / th >
< th > Actions< / th >
< / tr >
< / thead >
< tbody >
< / tbody >
< / table >
2015-09-18 13:03:07 +00:00
< p > A multi-domain or wildcard certificate will be automatically applied to any domains it is valid for.< / p >
2014-12-05 19:25:14 +00:00
2016-01-02 23:01:20 +00:00
< h3 id = "ssl_install_header" > Install Certificate< / h3 >
2014-10-10 15:49:14 +00:00
2016-01-02 23:01:20 +00:00
< p > There are many places where you can get a free or cheap 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 TLS< / a > < / a > .< / p >
2014-10-10 15:49:14 +00:00
2016-01-02 23:01:20 +00:00
< p > Which domain are you getting a certificate for?< / p >
2014-10-10 15:49:14 +00:00
< p > < select id = "ssldomain" onchange = "show_csr()" class = "form-control" style = "width: auto" > < / select > < / p >
2016-01-02 23:01:20 +00:00
< p > What country are you in? This is required by some TLS certificate providers. You may leave this blank if you know your TLS certificate provider doesn't require it.< / p >
2015-12-26 16:48:23 +00:00
< p > < select id = "sslcc" onchange = "show_csr()" class = "form-control" style = "width: auto" >
< option value = "" > (Select)< / option >
{% for code, name in csr_country_codes %}
< option value = "{{code}}" > {{name}}< / option >
{% endfor %}
< / select > < / p >
2014-10-10 15:49:14 +00:00
< div id = "csr_info" style = "display: none" >
2016-01-02 23:01:20 +00:00
< p > You will need to provide the certificate provider this Certificate Signing Request (CSR):< / p >
2014-10-10 15:49:14 +00:00
< 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 >
2016-01-02 23:01:20 +00:00
< p > The certificate provider will then provide you with a TLS/SSL certificate. They may also provide you with an intermediate chain. Paste each separately into the boxes below:< / p >
2014-10-10 15:49:14 +00:00
2016-01-02 23:01:20 +00:00
< p style = "margin-bottom: .5em" > TLS/SSL certificate:< / p >
2014-10-10 15:49:14 +00:00
< p > < textarea id = "ssl_paste_cert" class = "form-control" style = "max-width: 40em; height: 8em" placeholder = "-----BEGIN CERTIFICATE-----
stuff here
-----END CERTIFICATE-----" > < / textarea > < / p >
2016-01-02 23:01:20 +00:00
< p style = "margin-bottom: .5em" > TLS/SSL intermediate chain (if provided):< / p >
2014-10-10 15:49:14 +00:00
< 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 >
2016-01-02 23:01:20 +00:00
function show_tls() {
2014-10-10 15:49:14 +00:00
api(
2016-01-02 22:53:47 +00:00
"/ssl/status",
2014-10-10 15:49:14 +00:00
"GET",
{
},
2016-01-02 22:53:47 +00:00
function(res) {
// provisioning status
if (res.can_provision.length > 0) {
2016-01-02 23:22:22 +00:00
$('#ssl_provision_status')
.removeClass("text-warning").removeClass("text-success").addClass("text-danger")
2016-01-02 22:53:47 +00:00
.text("Domains: " + res.can_provision.join(", "));
} else if (res.cant_provision.length == 0) {
2016-01-02 23:22:22 +00:00
$('#ssl_provision_status')
.addClass("text-success").removeClass("text-warning").removeClass("text-danger")
.text("No domains hosted on this box need a new TLS certificate at this time.");
2016-01-02 22:53:47 +00:00
} else {
2016-01-02 23:22:22 +00:00
$('#ssl_provision_status')
.removeClass("text-success").addClass("text-warning").removeClass("text-danger")
.text("No TLS certificates can be provisoned at this time:");
2016-01-02 22:53:47 +00:00
}
$('#ssl_provision_problems').toggle(res.cant_provision.length > 0);
$('#ssl_provision_problems tbody').text("");
for (var i = 0; i < res.cant_provision.length ; i + + ) {
var domain = res.cant_provision[i];
var row = $("< tr > < th class = 'domain' > < a href = '' > < / a > < / th > < td class = 'status' > < / td > < / tr > ");
$('#ssl_provision_problems tbody').append(row);
row.attr('data-domain', domain.domain);
row.find('.domain a').text(domain.domain);
row.find('.domain a').attr('href', 'https://' + domain.domain);
row.find('.status').text(domain.problem);
}
// certificate status
var domains = res.status;
2014-10-10 15:49:14 +00:00
var tb = $('#ssl_domains tbody');
tb.text('');
$('#ssldomain').html('< option value = "" > (select)< / option > ');
2016-01-02 22:53:47 +00:00
$('#ssl_domains').show();
2014-10-10 15:49:14 +00:00
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);
2016-01-02 22:53:47 +00:00
row.addClass("text-" + domains[i].status);
row.find('.status').text(domains[i].text);
if (domains[i].status == "success") {
2014-10-10 15:49:14 +00:00
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();
2014-10-23 17:10:21 +00:00
$('html, body').animate({ scrollTop: $('#ssl_install_header').offset().top - $('.navbar-fixed-top').height() - 20 })
2014-10-10 15:49:14 +00:00
return false;
}
function show_csr() {
api(
"/ssl/csr/" + $('#ssldomain').val(),
"POST",
{
2015-12-26 16:48:23 +00:00
countrycode: $('#sslcc').val()
2014-10-10 15:49:14 +00:00
},
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) {
2015-05-28 18:45:35 +00:00
if (/^OK($|\n)/.test(status)) {
console.log(status)
2016-01-02 23:01:20 +00:00
show_modal_error("TLS Certificate Installation", "Certificate has been installed. Check that you have no connection problems to the domain.", function() { show_ssl(); $('#csr_info').slideUp(); });
2014-10-10 15:49:14 +00:00
} else {
2016-01-02 23:01:20 +00:00
show_modal_error("TLS Certificate Installation", status);
2014-10-10 15:49:14 +00:00
}
});
}
< / script >