<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.osnexus.com/index.php?action=history&amp;feed=atom&amp;title=Applying_Custom_Web_User_Interface_Certificates</id>
	<title>Applying Custom Web User Interface Certificates - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.osnexus.com/index.php?action=history&amp;feed=atom&amp;title=Applying_Custom_Web_User_Interface_Certificates"/>
	<link rel="alternate" type="text/html" href="https://wiki.osnexus.com/index.php?title=Applying_Custom_Web_User_Interface_Certificates&amp;action=history"/>
	<updated>2026-08-21T02:26:12Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.osnexus.com/index.php?title=Applying_Custom_Web_User_Interface_Certificates&amp;diff=27141&amp;oldid=prev</id>
		<title>Qadmin: Created page with &quot;= QuantaStor WebUI Custom Certificates and Cipher Settings =  QuantaStor&#039;s web management UI is served via Nginx, which by default uses the auto-generated self-signed certificates installed at &lt;code&gt;/var/opt/osnexus/quantastor/ssl/&lt;/code&gt;. The &lt;code&gt;qs-util wuicustomcerts*&lt;/code&gt; family of commands lets administrators override the default Nginx SSL configuration with their own certificate paths, TLS protocols, cipher suites, and other directives, without modifying any Qu...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.osnexus.com/index.php?title=Applying_Custom_Web_User_Interface_Certificates&amp;diff=27141&amp;oldid=prev"/>
		<updated>2026-05-06T14:53:09Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;= QuantaStor WebUI Custom Certificates and Cipher Settings =  QuantaStor&amp;#039;s web management UI is served via Nginx, which by default uses the auto-generated self-signed certificates installed at &amp;lt;code&amp;gt;/var/opt/osnexus/quantastor/ssl/&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;qs-util wuicustomcerts*&amp;lt;/code&amp;gt; family of commands lets administrators override the default Nginx SSL configuration with their own certificate paths, TLS protocols, cipher suites, and other directives, without modifying any Qu...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= QuantaStor WebUI Custom Certificates and Cipher Settings =&lt;br /&gt;
&lt;br /&gt;
QuantaStor&amp;#039;s web management UI is served via Nginx, which by default uses the auto-generated self-signed certificates installed at &amp;lt;code&amp;gt;/var/opt/osnexus/quantastor/ssl/&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;qs-util wuicustomcerts*&amp;lt;/code&amp;gt; family of commands lets administrators override the default Nginx SSL configuration with their own certificate paths, TLS protocols, cipher suites, and other directives, without modifying any QuantaStor-managed config file directly.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Nginx loads its SSL settings from a single included file:&lt;br /&gt;
&lt;br /&gt;
 /opt/osnexus/common/lib/nginx_quantastor_ssl.conf&lt;br /&gt;
&lt;br /&gt;
This path is a symlink. By default, it points at the QuantaStor-shipped default:&lt;br /&gt;
&lt;br /&gt;
 /opt/osnexus/common/lib/nginx_quantastor_ssl.conf&lt;br /&gt;
   -&amp;gt; /opt/osnexus/common/lib/nginx_quantastor_ssl_default.conf&lt;br /&gt;
&lt;br /&gt;
Running &amp;lt;code&amp;gt;qs-util wuicustomcerts&amp;lt;/code&amp;gt; swaps the symlink to point at a user-owned copy under &amp;lt;code&amp;gt;/var/opt/osnexus/quantastor/ssl/&amp;lt;/code&amp;gt;, which is safe to edit, persists across upgrades, and is not overwritten by QuantaStor.&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;qs-util wuicustomcerts&amp;lt;/code&amp;gt; || Enable custom mode. Creates &amp;lt;code&amp;gt;/var/opt/osnexus/quantastor/ssl/nginx_quantastor_ssl_custom.conf&amp;lt;/code&amp;gt; (seeded from the default) and points the active symlink at it. Will not overwrite an existing custom file.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;qs-util wuicustomcertsrestart&amp;lt;/code&amp;gt; || Restart Nginx so changes to the custom config take effect. Verifies that Nginx came back up active (running); on failure it prints &amp;lt;code&amp;gt;systemctl status&amp;lt;/code&amp;gt; and the last 5 minutes of &amp;lt;code&amp;gt;journalctl -u nginx&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;qs-util wuicustomcertsdefault&amp;lt;/code&amp;gt; || Revert to the QuantaStor defaults. Removes the custom file, points the symlink back at &amp;lt;code&amp;gt;nginx_quantastor_ssl_default.conf&amp;lt;/code&amp;gt;, and restarts Nginx.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Default Configuration (Reference) ==&lt;br /&gt;
&lt;br /&gt;
The shipped default &amp;lt;code&amp;gt;nginx_quantastor_ssl_default.conf&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssl_certificate     /var/opt/osnexus/quantastor/ssl/qsrestsrv.pem;&lt;br /&gt;
ssl_certificate_key /var/opt/osnexus/quantastor/ssl/qsrestsrv.pem;&lt;br /&gt;
ssl_client_certificate /var/opt/osnexus/quantastor/ssl/qscacert.pem;&lt;br /&gt;
&lt;br /&gt;
ssl_protocols TLSv1.2 TLSv1.3;&lt;br /&gt;
ssl_ciphers &amp;quot;ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256&amp;quot;;&lt;br /&gt;
ssl_prefer_server_ciphers on;&lt;br /&gt;
gzip off;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that &amp;lt;code&amp;gt;ssl_certificate&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ssl_certificate_key&amp;lt;/code&amp;gt; both point at the same file. Nginx handles this correctly; it reads the file twice, locating the certificate block and the private key block independently. A single PEM file containing the certificate, private key, and CA certificate is a fully supported configuration.&lt;br /&gt;
&lt;br /&gt;
The custom file is seeded with this exact content the first time you run &amp;lt;code&amp;gt;qs-util wuicustomcerts&amp;lt;/code&amp;gt;, so you start from a known-good baseline.&lt;br /&gt;
&lt;br /&gt;
== Typical Workflow: Installing a CA-Signed Certificate ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1.&amp;#039;&amp;#039;&amp;#039; Stage your certificate and key under &amp;lt;code&amp;gt;/var/opt/osnexus/quantastor/ssl/&amp;lt;/code&amp;gt;. The recommended filenames are:&lt;br /&gt;
&lt;br /&gt;
 /var/opt/osnexus/quantastor/ssl/qsrestsrv_custom.pem&lt;br /&gt;
 /var/opt/osnexus/quantastor/ssl/qscacert_custom.pem&lt;br /&gt;
&lt;br /&gt;
The certificate file should contain the server certificate followed by any intermediate CA certificates (a &amp;quot;full chain&amp;quot; PEM). The private key must be unencrypted (no passphrase) since Nginx is started non-interactively.&lt;br /&gt;
&lt;br /&gt;
If your CA provides a single PEM bundle containing the certificate, private key, and CA certificate, that file can be used for all three directives. You can also use it for both &amp;lt;code&amp;gt;qsrestsrv_custom.pem&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;qscacert_custom.pem&amp;lt;/code&amp;gt; if you prefer to keep the naming consistent.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2.&amp;#039;&amp;#039;&amp;#039; Enable custom mode:&lt;br /&gt;
&lt;br /&gt;
 qs-util wuicustomcerts&lt;br /&gt;
&lt;br /&gt;
This creates &amp;lt;code&amp;gt;/var/opt/osnexus/quantastor/ssl/nginx_quantastor_ssl_custom.conf&amp;lt;/code&amp;gt; and re-points the active symlink at it. On SELinux-enabled systems, the appropriate &amp;lt;code&amp;gt;httpd_config_t&amp;lt;/code&amp;gt; context is also applied so Nginx can read the file.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;3.&amp;#039;&amp;#039;&amp;#039; Edit the custom config at &amp;lt;code&amp;gt;/var/opt/osnexus/quantastor/ssl/nginx_quantastor_ssl_custom.conf&amp;lt;/code&amp;gt; and update the certificate paths:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssl_certificate     /var/opt/osnexus/quantastor/ssl/qsrestsrv_custom.pem;&lt;br /&gt;
ssl_certificate_key /var/opt/osnexus/quantastor/ssl/qsrestsrv_custom.pem;&lt;br /&gt;
ssl_client_certificate /var/opt/osnexus/quantastor/ssl/qscacert_custom.pem;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also tighten protocols and ciphers here (see [[#Tightening TLS Protocols and Ciphers]] below).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;4.&amp;#039;&amp;#039;&amp;#039; Apply the change:&lt;br /&gt;
&lt;br /&gt;
 qs-util wuicustomcertsrestart&lt;br /&gt;
&lt;br /&gt;
Confirm the command reports &amp;#039;&amp;#039;&amp;#039;Nginx restarted successfully&amp;#039;&amp;#039;&amp;#039;, then load the WebUI in a browser to verify the new certificate is presented.&lt;br /&gt;
&lt;br /&gt;
== Tightening TLS Protocols and Ciphers ==&lt;br /&gt;
&lt;br /&gt;
Because the included file is a standard Nginx SSL fragment, any directive valid inside an Nginx &amp;lt;code&amp;gt;server { }&amp;lt;/code&amp;gt; block can be added. Common hardening edits:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Restrict to TLS 1.3 only&lt;br /&gt;
ssl_protocols TLSv1.3;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After any edit, run &amp;lt;code&amp;gt;qs-util wuicustomcertsrestart&amp;lt;/code&amp;gt; to reload.&lt;br /&gt;
&lt;br /&gt;
== Reverting to Defaults ==&lt;br /&gt;
&lt;br /&gt;
If a customized config breaks Nginx or you simply want to go back to QuantaStor-managed self-signed certs:&lt;br /&gt;
&lt;br /&gt;
 qs-util wuicustomcertsdefault&lt;br /&gt;
&lt;br /&gt;
This deletes the custom file, restores the symlink to &amp;lt;code&amp;gt;nginx_quantastor_ssl_default.conf&amp;lt;/code&amp;gt;, and restarts Nginx in one step.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;qs-util wuicustomcerts&amp;lt;/code&amp;gt; reports &amp;quot;File already exists&amp;quot;&lt;br /&gt;
: The custom file has already been created from a previous run. This is expected; edit the existing file rather than re-creating it. To start over from the shipped default, run &amp;lt;code&amp;gt;qs-util wuicustomcertsdefault&amp;lt;/code&amp;gt; first, then &amp;lt;code&amp;gt;qs-util wuicustomcerts&amp;lt;/code&amp;gt; again.&lt;br /&gt;
&lt;br /&gt;
; Nginx fails to restart&lt;br /&gt;
: &amp;lt;code&amp;gt;wuicustomcertsrestart&amp;lt;/code&amp;gt; will automatically show &amp;lt;code&amp;gt;systemctl status nginx&amp;lt;/code&amp;gt; and the last 5 minutes of &amp;lt;code&amp;gt;journalctl -u nginx&amp;lt;/code&amp;gt;. The most common causes are:&lt;br /&gt;
:* Typos in directive names or missing semicolons in the custom file&lt;br /&gt;
:* Certificate/key path doesn&amp;#039;t exist or has wrong permissions (Nginx runs as &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt;)&lt;br /&gt;
:* Certificate and private key don&amp;#039;t match&lt;br /&gt;
:* Encrypted private key (passphrase-protected); Nginx cannot prompt for it&lt;br /&gt;
:* On SELinux systems, missing or wrong file context on the cert/key files&lt;br /&gt;
&lt;br /&gt;
; Custom changes &amp;quot;disappeared&amp;quot; after upgrade&lt;br /&gt;
: They shouldn&amp;#039;t. The custom file lives under &amp;lt;code&amp;gt;/var/opt/osnexus/quantastor/ssl/&amp;lt;/code&amp;gt; which is preserved across upgrades. If the symlink got reset to defaults, simply re-run &amp;lt;code&amp;gt;qs-util wuicustomcerts&amp;lt;/code&amp;gt; (it will not overwrite your existing custom file) to re-establish the symlink.&lt;br /&gt;
&lt;br /&gt;
; Verifying which config is active&lt;br /&gt;
: &amp;lt;code&amp;gt;ls -l /opt/osnexus/common/lib/nginx_quantastor_ssl.conf&amp;lt;/code&amp;gt; shows where the symlink currently points. A target of &amp;lt;code&amp;gt;..._ssl_custom.conf&amp;lt;/code&amp;gt; means custom mode is active; &amp;lt;code&amp;gt;..._ssl_default.conf&amp;lt;/code&amp;gt; means defaults are active.&lt;br /&gt;
&lt;br /&gt;
== File Locations Summary ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Path !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/opt/osnexus/common/lib/nginx_quantastor_ssl.conf&amp;lt;/code&amp;gt; || Active SSL config; symlink, do not edit&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/opt/osnexus/common/lib/nginx_quantastor_ssl_default.conf&amp;lt;/code&amp;gt; || Shipped defaults; do not edit, replaced on upgrade&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/var/opt/osnexus/quantastor/ssl/nginx_quantastor_ssl_custom.conf&amp;lt;/code&amp;gt; || User-editable custom config; preserved across upgrades&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/var/opt/osnexus/quantastor/ssl/qsrestsrv.pem&amp;lt;/code&amp;gt; || Default self-signed server cert + key&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/var/opt/osnexus/quantastor/ssl/qscacert.pem&amp;lt;/code&amp;gt; || Default QuantaStor CA cert&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/var/opt/osnexus/quantastor/ssl/qsrestsrv_custom.pem&amp;lt;/code&amp;gt; || Customer-provided server cert + key (recommended filename)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/var/opt/osnexus/quantastor/ssl/qscacert_custom.pem&amp;lt;/code&amp;gt; || Customer-provided CA cert (recommended filename; may be the same file as &amp;lt;code&amp;gt;qsrestsrv_custom.pem&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Related Commands ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;qs-util cacertuselegacy&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;qs-util cacertusedefault&amp;lt;/code&amp;gt; - manage which CA certificate set the QuantaStor REST stack trusts (separate from the WebUI Nginx config covered here).&lt;/div&gt;</summary>
		<author><name>Qadmin</name></author>
	</entry>
</feed>