Thank you for the very detailed response. I'll try to be just as detailed in my reply. I tried everything you showed and I'm no further ahead, I'm afraid.
Here is the exact command I am running to test and create my PKCS12 file:
openssl pkcs12 -export -out certificate.pfx -inkey private.key -in cert.crt -certfile chain.pem -chain
The chain.pem file is a concatenated file of the intermediate certificate and the root certificate, in that order. This resulted in the following:
Error unable to get local issuer certificate getting chain.
When NOT using the -chain tag, the PKS file is created normally. I upload that to the UTM into the >Webserver Protection > Certificate Management > Certificates
I have also uploaded the concatenated intermediate Class 1 certificate and the Root Certificate for StartSSL (from https://www.startssl.com/root ) to >Webserver Protection > Certificate Management > Certificate Authority as a "Verification CA". Of particular interest, when I check where this is in use (using the {i} in the webadmin interface), it shows as in use by the certificate I uploaded in the previous paragraph.
I have tried creating the PKCS12 file with just the root, just the intermediate, the intermediate+root (concatenated), and root+intermediate (concatenated) with no luck. Same chain error.
I still get firefox errors with no errors on Safari or Chrome.
What am I doing wrong?
Your PKCS12 command is incorrect and shouldn't contain the -chain flag in this situation. I can't remember what situation it is required in, but it shouldn't be used when including a concatenated ICA-CA-chain.pem
What are the exact error(s) you're receiving in firefox? Browsers will throw certificate errors for a variety of reasons, and if you're not getting errors with Chrome or Safari, then it's likely not a critical error; however, if you post the error message, I can do some research and get back to you. My hunch is because it was issued from a signing authority still using the inadequate sha1 signing algorithm.
Just to verify, everything is working fine, with the exception of the firefox error? I ask because I wasn't sure if the "...same chain error" was in reference to the FireFox issue or not. If it's not, something is missing from the equation and you're going to need to use the OpenSSL verify commands to verify the modulus of each cert to it's issuing authority. You're doing everything correctly, so I'm wondering if there isn't a second ICA involved that signed the ICA your cert is signed by.
Before squinting to compare moduluses, please list what the GUI chain of trust shows for the following certs [i.e. Certification Path in Windows]:
WebAdmin
ICA that signed WebAdmin
CA that signed ICA
SilverStone DS380 | AsRock C2750D4I | Alienware 18 | In Win Chopin | SuperMicro A1SRi-2758F
2.4gHz 8C C2750 ; 32GB ECC | 2.5gHz 4C i7 4710MQ ; 32GB | 2.4gHz 8C C2758 ; 32GB ECC
Vantec 4C USB3 PCIe UGT-PCE430-4C | 8GB AMD SLI R9 M290x |
SSD | 850 EVO: 120GB | 1TB ; mSATA: 1TB (2) | 850 Pro: 128GB ; 850 EVO: 1TB
HDD | Seagate: { ST4000VN000 (8) } Z2 ; { HGST HTS721010A (3) } Z2 |
FreeNAS 11.2 | { PNY Turbo USB3 32GB (2) } Mirror | Win 10 Pro | ESXi 6.7: Sophos UTM 9.6
Various Wikis, Scripts, & Configs | Prebuilt OpenSSL Config
Having the same issue here.
This is what I used in OpenSSL.
openssl pkcs12 -export -out cert.pfx -inkey privatekey.key -in cert.crt -certfile intcacert.crt
I just don't believe the UTM is sending the intermediate CA. I have a case open with support. This issue has come numerous times. In fact this thread goes back to Dec, 2013. Something is wrong with the implementation in the UTM.
I'm not sure what you mean by "...I just don't believe the UTM is sending the intermediate CA."
The cert file needs to be a concatenated pem file as I've repeatedly stated throughout this thread, and I've also repeatedly addressed the above as well. Please read back through my prior posts...
A general FYI: Because I'm likely to respond with snark at this point, any other replies to this thread indicating a user did not read at least the last 10 posts, as well as other posts referenced, will not receive a reply and will be ignored. I understand threads can span many pages, so asking one to briefly skim the last 10 posts, is not, I believe, asking too much.
SilverStone DS380 | AsRock C2750D4I | Alienware 18 | In Win Chopin | SuperMicro A1SRi-2758F
2.4gHz 8C C2750 ; 32GB ECC | 2.5gHz 4C i7 4710MQ ; 32GB | 2.4gHz 8C C2758 ; 32GB ECC
Vantec 4C USB3 PCIe UGT-PCE430-4C | 8GB AMD SLI R9 M290x |
SSD | 850 EVO: 120GB | 1TB ; mSATA: 1TB (2) | 850 Pro: 128GB ; 850 EVO: 1TB
HDD | Seagate: { ST4000VN000 (8) } Z2 ; { HGST HTS721010A (3) } Z2 |
FreeNAS 11.2 | { PNY Turbo USB3 32GB (2) } Mirror | Win 10 Pro | ESXi 6.7: Sophos UTM 9.6
Various Wikis, Scripts, & Configs | Prebuilt OpenSSL Config
Perhaps if the whole thing was explained in one KB this would be easier to understand. It's ridiculous to have to dig through a bunch of postings to figure this out. The UTM should just handle the CSR generation and all the baggage that goes along with it to begin with. Having to bring in a cert from Windows or OpenSSL shouldn't be necessary.
In your post here:
You state:
What I've assumed you've been trying to do is install a 3rd party signed WebAdmin cert into Sophos and have it so that you're not getting browser errors when navigating to the WebAdmin or User Profile pages.
Clients:
This is exactly what I am complaining about. If the OS/Browser already trusts the CA why does it manually need to be installed in Windows? That should only be necessary if you are using a self-signed cert.
What do you believe makes a browser trust a certificate, as it's not the browser...
Every OS comes pre-installed with root and intermediate CA certificates from the popular and trusted root and intermediate CAs (using self-signed CAs has nothing to do with it)... if an OS does not register a client/server cert as trusted, then one or two things are the cause of this (or both): either the root CA that signed the cert is not trusted in the certificate store [i.e. it hasn't been installed, or has been marked as not trusted], or the intermediate CA(s) is not in the certificate store.
This is not an issue with Sophos, but a fundamental misunderstanding of certificate chain of trust.
"If the OS/Browser already trusts the CA why does it manually need to be installed in Windows"
Obviously the OS does not have a chain of trust for the certificate, else you wouldn't be having a chain of trust issue. If you believe you do have a proper chain of trust, please do what I asked the other user to do here (bottom of post).
SilverStone DS380 | AsRock C2750D4I | Alienware 18 | In Win Chopin | SuperMicro A1SRi-2758F
2.4gHz 8C C2750 ; 32GB ECC | 2.5gHz 4C i7 4710MQ ; 32GB | 2.4gHz 8C C2758 ; 32GB ECC
Vantec 4C USB3 PCIe UGT-PCE430-4C | 8GB AMD SLI R9 M290x |
SSD | 850 EVO: 120GB | 1TB ; mSATA: 1TB (2) | 850 Pro: 128GB ; 850 EVO: 1TB
HDD | Seagate: { ST4000VN000 (8) } Z2 ; { HGST HTS721010A (3) } Z2 |
FreeNAS 11.2 | { PNY Turbo USB3 32GB (2) } Mirror | Win 10 Pro | ESXi 6.7: Sophos UTM 9.6
Various Wikis, Scripts, & Configs | Prebuilt OpenSSL Config
In Apache server and other HTTP servers, you can set the "CA Cert" OR you can concatenate the site cert with the hostname, the intermediate cert and signing CA. In the case of Comodo there are two intermediate certs: COMODO RSA Domain Validation and COMODO RSA Certification Authority. So you could concatenate the website hostname certificate, Comodo RSA Domain Validation and Comodo RSA CA into a single pem and set that in Apache as the "website certificate", then of course set the key file. What this causes Apache to do is that it provides the entire chained PEM file during the SSL handshakes, which provides the web client's browser the necessary intermediate certs to complete the chain of trust.
What appears to be wrong with the UTM is that even if the intermediates are all part of a single PEM, it is only sending the "site hostname" or "WebAdmin" cert, it's ignoring the intermediates entirely even if they are all concatenated. For example:
Uploaded the pfx file to the UTM and I set the WebAdmin to use that cert. Upon browsing to the WebAdmin, Chrome still shows a certificate CA validation error. Following the same procedure but uploading to an Apache server, everything works 100%. The issue does appear to be a problem with the UTM not sending all of the certs in the chain as part of the SSL handshake.
Perhaps I'm missing something, but where is the root CA in all of this?
What does openssl say when you verify the moduluses of sophos.domain.com-chain.pem and sophos.domain.com.net-chain.pfx?
...Following the same procedure but uploading to an Apache server, everything works 100%...
What is the exact error message Chrome is showing?
AES-GCM
and CAMELLIA-GCM
ciphersuites to successfully handshake with a server using the ustream-polarssl backend.CONFIG_GCM
is disabled, ssl_ciphersuite_from_id()
will return NULL
when cipher 0x9d
is looked up (TLS_RSA_WITH_AES_256_GCM_SHA384)ssl_ciphersuite_match()
to fail with POLARSSL_ERR_SSL_INTERNAL_ERROR
(RFC 5288)Does IE, FireFox, or any other browser throw an error (installed on same system as Chrome)?
What occurs in Apache if you specify the CA cert instead of concatenating it within the domain cert?
Also, does Sophos use Apache as it's webserver?
The simple solution to all of this is installing the ICA and CA certs onto the client PCs; however, if one wishes to determine the cause, all the above will need to be sorted out. The problem is most likely user error and not following the proper etiquette of providing certificate chain of trust, which would be the case since the root CA is nowhere to be found.
SilverStone DS380 | AsRock C2750D4I | Alienware 18 | In Win Chopin | SuperMicro A1SRi-2758F
2.4gHz 8C C2750 ; 32GB ECC | 2.5gHz 4C i7 4710MQ ; 32GB | 2.4gHz 8C C2758 ; 32GB ECC
Vantec 4C USB3 PCIe UGT-PCE430-4C | 8GB AMD SLI R9 M290x |
SSD | 850 EVO: 120GB | 1TB ; mSATA: 1TB (2) | 850 Pro: 128GB ; 850 EVO: 1TB
HDD | Seagate: { ST4000VN000 (8) } Z2 ; { HGST HTS721010A (3) } Z2 |
FreeNAS 11.2 | { PNY Turbo USB3 32GB (2) } Mirror | Win 10 Pro | ESXi 6.7: Sophos UTM 9.6
Various Wikis, Scripts, & Configs | Prebuilt OpenSSL Config
There's no reason to install the root and intermediate certs onto the clients. If I go to that trouble I might as just use self-signed certs. The root should already be on the client anyway. And in reality the root shouldn't be necessary on the UTM either.
From RFC 5246 - certificate_list
This is a sequence (chain) of certificates. The sender's certificate MUST come first in the list. Each following certificate MUST directly certify the one preceding it. Because certificate validation requires that root keys be distributed independently, the self-signed certificate that specifies the root certificate authority MAY be omitted from the chain, under the assumption that the remote end must already possess it in order to validate it in any case.
We also have an OpenVPN server running under Ubuntu. I have had to replace the cert twice and have never had any trouble like this. You are correct that pfx has been deprecated. It's not correct, but the extensions are used somewhat interchangeably like saying SSL instead of TLS.
I went ahead and spent $9 on a cheap cert tonight. If I get a chance I'll try this all over again tomorrow on a different UTM.
Where do you believe root ca's are installed from? The ether? Perhaps they simply pop into existence in a puff of smoke on a PC? From the information you've provided, your issue appears to be there's no certificate chain of trust back to the root CA that signed the 1st ICA. What root CA signed that ICA? Once you verify what CA it is, you'll then need to verify if that CA is installed on the client [under Trusted Root CAs] and Sophos [verification CA]... most likely, it's not (in the filesystem, it's saved as /var/chroot-httpd/etc/httpd/WebAdminCertCA.pem)
I'm well aware of the sequence of certs in a certificate chain... the chain would need to be configured in the way I listed. I've spent hours writing and formatting posts on this thread, providing exactly how to do what one needs to do to maintain chian of trust; since I'm to the point of becoming snarky, best of luck to you.
I encourage you to re-read what I wrote, specifically about verifying your certs, which you still haven't bothered to do. Hopefully someone else takes pity, as I'll no longer reply to thread... the information you require has been given to you, it's your choice whether or not you're going to use it. Cheers =]
Oh and one other thing... the only difference between a commercial CA and a Self-Signed CA is the trust factor in the CRL. When one purchases a certificate, one isn't paying for the certificate, one is paying for the management of the CRL and the layer of trust that results in. Unless one has a website that will see random traffic (i.e. not the same pool of users), or processes financial information, there's nothing gained by going with a commercial CA. In fact, more often than not, my Self-Signed CA & ICAs are more secure than many commercial CAs & ICAs... but again, what one is paying for is the CRL management.
SilverStone DS380 | AsRock C2750D4I | Alienware 18 | In Win Chopin | SuperMicro A1SRi-2758F
2.4gHz 8C C2750 ; 32GB ECC | 2.5gHz 4C i7 4710MQ ; 32GB | 2.4gHz 8C C2758 ; 32GB ECC
Vantec 4C USB3 PCIe UGT-PCE430-4C | 8GB AMD SLI R9 M290x |
SSD | 850 EVO: 120GB | 1TB ; mSATA: 1TB (2) | 850 Pro: 128GB ; 850 EVO: 1TB
HDD | Seagate: { ST4000VN000 (8) } Z2 ; { HGST HTS721010A (3) } Z2 |
FreeNAS 11.2 | { PNY Turbo USB3 32GB (2) } Mirror | Win 10 Pro | ESXi 6.7: Sophos UTM 9.6
Various Wikis, Scripts, & Configs | Prebuilt OpenSSL Config