diff --git a/bin/v-change-sys-vesta-ssl b/bin/v-change-sys-vesta-ssl
new file mode 100755
index 00000000..2531714e
--- /dev/null
+++ b/bin/v-change-sys-vesta-ssl
@@ -0,0 +1,77 @@
+#!/bin/bash
+# info: change vesta ssl certificate
+# options: SSL_DIR [RESTART]
+#
+# The function changes vesta SSL certificate and the key.
+
+
+#----------------------------------------------------------#
+# Variable&Function #
+#----------------------------------------------------------#
+
+# Argument definition
+domain='certificate'
+ssl_dir=$1
+restart=$2
+
+# Includes
+source $VESTA/func/main.sh
+source $VESTA/func/domain.sh
+source $VESTA/conf/vesta.conf
+
+
+#----------------------------------------------------------#
+# Verifications #
+#----------------------------------------------------------#
+
+check_args '1' "$#" 'SSL_DIR [RESTART]'
+is_format_valid 'ssl_dir'
+
+
+#----------------------------------------------------------#
+# Action #
+#----------------------------------------------------------#
+
+# Checking new certificate
+certificate=$(cat $ssl_dir/$domain.crt |grep -n END)
+certificate_count=$(echo "$certificate" |wc -l)
+if [ "$certificate_count" -gt 1 ]; then
+ crt_end=$(echo "$certificate" |head -n1 |cut -f 1 -d :)
+ crt_lines=$(wc -l $ssl_dir/$domain.crt |cut -f1 -d ' ')
+ pem_begin=$((crt_lines - crt_end))
+ mv $ssl_dir/$domain.crt $ssl_dir/$domain.crt_full
+ head -n $crt_end $ssl_dir/$domain.crt_full > $ssl_dir/$domain.crt
+ tail -n $pem_begin $ssl_dir/$domain.crt_full > $ssl_dir/$domain.ca
+ is_web_domain_cert_valid
+ mv -f $ssl_dir/$domain.crt_full $ssl_dir/$domain.crt
+ rm -f $ssl_dir/$domain.ca
+else
+ is_web_domain_cert_valid
+fi
+
+# Moving old certificate
+mv $VESTA/ssl/certificate.crt $VESTA/ssl/certificate.crt.back
+mv $VESTA/ssl/certificate.key $VESTA/ssl/certificate.key.back
+
+# Adding new certificate
+cp -f $ssl_dir/certificate.crt $VESTA/ssl/certificate.crt
+cp -f $ssl_dir/certificate.key $VESTA/ssl/certificate.key
+
+
+#----------------------------------------------------------#
+# Vesta #
+#----------------------------------------------------------#
+
+# Restarting web server
+if [ "$restart" != 'no' ]; then
+ kill -HUP $(cat /var/run/vesta-nginx.pid)
+ $BIN/v-restart-mail
+ if [ ! -z "$IMAP_SYSTEM" ]; then
+ v-restart-service "$IMAP_SYSTEM"
+ fi
+fi
+
+# Logging
+log_event "$OK" "$ARGUMENTS"
+
+exit
diff --git a/bin/v-list-sys-vesta-ssl b/bin/v-list-sys-vesta-ssl
new file mode 100755
index 00000000..f44e83a1
--- /dev/null
+++ b/bin/v-list-sys-vesta-ssl
@@ -0,0 +1,130 @@
+#!/bin/bash
+# info: list vesta ssl certificate
+# options: [FORMAT]
+#
+# The function of obtaining vesta ssl files.
+
+
+#----------------------------------------------------------#
+# Variable&Function #
+#----------------------------------------------------------#
+
+# Argument definition
+format=${1-shell}
+
+# Includes
+source $VESTA/func/main.sh
+
+# JSON list function
+json_list() {
+ echo '{'
+ echo -e "\t\"VESTA\": {"
+ echo " \"CRT\": \"$crt\","
+ echo " \"KEY\": \"$key\","
+ echo " \"CA\": \"$ca\","
+ echo " \"SUBJECT\": \"$subj\","
+ echo " \"ALIASES\": \"$alt_dns\","
+ echo " \"NOT_BEFORE\": \"$before\","
+ echo " \"NOT_AFTER\": \"$after\","
+ echo " \"SIGNATURE\": \"$signature\","
+ echo " \"PUB_KEY\": \"$pub_key\","
+ echo " \"ISSUER\": \"$issuer\""
+ echo -e "\t}\n}"
+}
+
+# SHELL list function
+shell_list() {
+ if [ ! -z "$crt" ]; then
+ echo -e "$crt"
+ fi
+ if [ ! -z "$key" ]; then
+ echo -e "\n$key"
+ fi
+ if [ ! -z "$crt" ]; then
+ echo
+ echo
+ echo "SUBJECT: $subj"
+ if [ ! -z "$alt_dns" ]; then
+ echo "ALIASES: ${alt_dns//,/ }"
+ fi
+ echo "VALID FROM: $before"
+ echo "VALID TIL: $after"
+ echo "SIGNATURE: $signature"
+ echo "PUB_KEY: $pub_key"
+ echo "ISSUER: $issuer"
+ fi
+}
+
+# PLAIN list function
+plain_list() {
+ if [ ! -z "$crt" ]; then
+ echo -e "$crt"
+ fi
+ if [ ! -z "$key" ]; then
+ echo -e "\n$key"
+ fi
+ if [ ! -z "$ca" ]; then
+ echo -e "\n$ca"
+ fi
+ if [ ! -z "$crt" ]; then
+ echo "$subj"
+ echo "${alt_dns//,/ }"
+ echo "$before"
+ echo "$after"
+ echo "$signature"
+ echo "$pub_key"
+ echo "$issuer"
+ fi
+
+}
+
+# CSV list function
+csv_list() {
+ echo -n "CRT,KEY,CA,SUBJECT,ALIASES,NOT_BEFORE,NOT_AFTER,SIGNATURE,"
+ echo "PUB_KEY,ISSUER"
+ echo -n "\"$crt\",\"$key\",\"$ca\",\"$subj\",\"${alt_dns//,/ }\","
+ echo "\"$before\",\"$after\",\"$signature\",\"$pub_key\",\"$issuer\""
+}
+
+
+#----------------------------------------------------------#
+# Verifications #
+#----------------------------------------------------------#
+
+
+
+#----------------------------------------------------------#
+# Action #
+#----------------------------------------------------------#
+
+# Parsing SSL certificate
+crt=$(cat $VESTA/ssl/certificate.crt |sed ':a;N;$!ba;s/\n/\\n/g')
+key=$(cat $VESTA/ssl/certificate.crt |sed ':a;N;$!ba;s/\n/\\n/g')
+
+# Parsing SSL certificate details without CA
+info=$(openssl x509 -text -in $VESTA/ssl/certificate.crt)
+subj=$(echo "$info" |grep Subject: |cut -f 2 -d =)
+before=$(echo "$info" |grep Before: |sed -e "s/.*Before: //")
+after=$(echo "$info" |grep "After :" |sed -e "s/.*After : //")
+signature=$(echo "$info" |grep "Algorithm:" |head -n1 )
+signature=$(echo "$signature"| sed -e "s/.*Algorithm: //")
+pub_key=$(echo "$info" |grep Public-Key: |cut -f2 -d \( | tr -d \))
+issuer=$(echo "$info" |grep Issuer: |sed -e "s/.*Issuer: //")
+alt_dns=$(echo "$info" |grep DNS |sed -e 's/DNS:/\n/g' |tr -d ',')
+alt_dns=$(echo "$alt_dns" |tr -d ' ' |sed -e "/^$/d")
+alt_dns=$(echo "$alt_dns" |sed -e ':a;N;$!ba;s/\n/,/g')
+
+# Listing data
+case $format in
+ json) json_list ;;
+ plain) plain_list ;;
+ csv) csv_list ;;
+ shell) shell_list ;;
+esac
+
+
+#----------------------------------------------------------#
+# Vesta #
+#----------------------------------------------------------#
+
+exit
diff --git a/web/edit/server/index.php b/web/edit/server/index.php
index 9010ab77..14f4f672 100644
--- a/web/edit/server/index.php
+++ b/web/edit/server/index.php
@@ -78,6 +78,21 @@ foreach ($backup_types as $backup_type) {
}
}
+// List ssl certificate info
+exec (VESTA_CMD."v-list-sys-vesta-ssl json", $output, $return_var);
+$ssl_str = json_decode(implode('', $output), true);
+unset($output);
+$v_ssl_crt = $ssl_str['VESTA']['CRT'];
+$v_ssl_key = $ssl_str['VESTA']['KEY'];
+$v_ssl_ca = $ssl_str['VESTA']['CA'];
+$v_ssl_subject = $ssl_str['VESTA']['SUBJECT'];
+$v_ssl_aliases = $ssl_str['VESTA']['ALIASES'];
+$v_ssl_not_before = $ssl_str['VESTA']['NOT_BEFORE'];
+$v_ssl_not_after = $ssl_str['VESTA']['NOT_AFTER'];
+$v_ssl_signature = $ssl_str['VESTA']['SIGNATURE'];
+$v_ssl_pub_key = $ssl_str['VESTA']['PUB_KEY'];
+$v_ssl_issuer = $ssl_str['VESTA']['ISSUER'];
+
// Check POST request
if (!empty($_POST['save'])) {
@@ -178,7 +193,6 @@ if (!empty($_POST['save'])) {
}
}
-
// Update webmail url
if (empty($_SESSION['error_msg'])) {
if ($_POST['v_mail_url'] != $_SESSION['MAIL_URL']) {
@@ -231,7 +245,6 @@ if (!empty($_POST['save'])) {
}
}
-
// Change backup gzip level
if (empty($_SESSION['error_msg'])) {
if ($_POST['v_backup_gzip'] != $v_backup_gzip ) {
@@ -323,7 +336,6 @@ if (!empty($_POST['save'])) {
}
}
-
// Delete remote backup host
if (empty($_SESSION['error_msg'])) {
if ((empty($_POST['v_backup_host'])) && (!empty($v_backup_host))) {
@@ -340,6 +352,49 @@ if (!empty($_POST['save'])) {
}
}
+ // Update SSL certificate
+ if ((!empty($_POST['v_ssl_crt'])) && (empty($_SESSION['error_msg']))) {
+ if (($v_ssl_crt != str_replace("\r\n", "\n", $_POST['v_ssl_crt'])) || ($v_ssl_key != str_replace("\r\n", "\n", $_POST['v_ssl_key']))) {
+ exec ('mktemp -d', $mktemp_output, $return_var);
+ $tmpdir = $mktemp_output[0];
+
+ // Certificate
+ if (!empty($_POST['v_ssl_crt'])) {
+ $fp = fopen($tmpdir."/certificate.crt", 'w');
+ fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_crt']));
+ fwrite($fp, "\n");
+ fclose($fp);
+ }
+
+ // Key
+ if (!empty($_POST['v_ssl_key'])) {
+ $fp = fopen($tmpdir."/certificate.key", 'w');
+ fwrite($fp, str_replace("\r\n", "\n", $_POST['v_ssl_key']));
+ fwrite($fp, "\n");
+ fclose($fp);
+ }
+
+ exec (VESTA_CMD."v-change-sys-vesta-ssl ".$tmpdir, $output, $return_var);
+ check_return_code($return_var,$output);
+ unset($output);
+
+ // List ssl certificate info
+ exec (VESTA_CMD."v-list-sys-vesta-ssl json", $output, $return_var);
+ $ssl_str = json_decode(implode('', $output), true);
+ unset($output);
+ $v_ssl_crt = $ssl_str['VESTA']['CRT'];
+ $v_ssl_key = $ssl_str['VESTA']['KEY'];
+ $v_ssl_ca = $ssl_str['VESTA']['CA'];
+ $v_ssl_subject = $ssl_str['VESTA']['SUBJECT'];
+ $v_ssl_aliases = $ssl_str['VESTA']['ALIASES'];
+ $v_ssl_not_before = $ssl_str['VESTA']['NOT_BEFORE'];
+ $v_ssl_not_after = $ssl_str['VESTA']['NOT_AFTER'];
+ $v_ssl_signature = $ssl_str['VESTA']['SIGNATURE'];
+ $v_ssl_pub_key = $ssl_str['VESTA']['PUB_KEY'];
+ $v_ssl_issuer = $ssl_str['VESTA']['ISSUER'];
+ }
+ }
+
// Flush field values on success
if (empty($_SESSION['error_msg'])) {
$_SESSION['ok_msg'] = __('Changes has been saved.');
@@ -375,7 +430,6 @@ if (!empty($_POST['save'])) {
}
}
-
// activating filemanager licence
if (empty($_SESSION['error_msg'])) {
if($_SESSION['FILEMANAGER_KEY'] != $_POST['v_filemanager_licence'] && $_POST['v_filemanager'] == 'yes'){
@@ -410,11 +464,14 @@ if (!empty($_POST['save'])) {
// Check system configuration
exec (VESTA_CMD . "v-list-sys-config json", $output, $return_var);
$data = json_decode(implode('', $output), true);
+unset($output);
+
$sys_arr = $data['config'];
foreach ($sys_arr as $key => $value) {
$_SESSION[$key] = $value;
}
+
// Render page
render_page($user, $TAB, 'edit_server');
diff --git a/web/templates/admin/edit_server.html b/web/templates/admin/edit_server.html
index ca238ab1..cbed81f5 100644
--- a/web/templates/admin/edit_server.html
+++ b/web/templates/admin/edit_server.html
@@ -576,6 +576,106 @@
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+
+
+ =__('SUBJECT')?>:
+ |
+
+ =$v_ssl_subject?>
+ |
+
+ if($v_ssl_aliases){?>
+
+
+ =__('ALIASES')?>:
+ |
+
+ =$v_ssl_aliases?>
+ |
+
+ } ?>
+
+
+ =__('NOT_BEFORE')?>:
+ |
+
+ =$v_ssl_not_before?>
+ |
+
+
+
+ =__('NOT_AFTER')?>:
+ |
+
+ =$v_ssl_not_after?>
+ |
+
+
+
+ =__('SIGNATURE')?>:
+ |
+
+ =$v_ssl_signature?>
+ |
+
+
+
+
+ =__('PUB_KEY')?>:
+ |
+
+ =$v_ssl_pub_key?>
+ |
+
+
+
+ =__('ISSUER')?>
+ |
+
+ =$v_ssl_issuer?>
+ |
+
+
+ |
+
+
+ |
+
+
+
|