From us: With this article, we begin a new series of publications on our website: HEXSSL Insight. These will be extensive articles containing our expertise supported by numerous examples from our own experience. We hope that the information contained in these articles will help you better understand all aspects related to broadly defined online security.
Every secure HTTPS session begins with one fundamental question: can I trust the website I am connecting to?
The answer doesn’t depend solely on encryption – the key factor is who has verified the identity of the server.
This mechanism forms the core of the PKI (Public Key Infrastructure), which builds and maintains the global SSL/TLS trust chain.
In practice, a browser trusts websites not because a server has a certificate, but because that certificate has been signed by a Certification Authority (CA) included in its trusted store.
If the browser or operating system knows and trusts a particular root CA, and that root has directly or indirectly confirmed the authenticity of the server’s certificate, the connection is considered secure.
This mechanism guarantees three things:
Only after these conditions are met does the browser display the padlock symbol 🔒.
It’s important to remember that encryption alone (HTTPS) without trust does not mean security — a server can use a self-signed certificate that no trusted entity has verified.
Table of Contents
TogglePublic Key Infrastructure is a distributed system of entities, rules, and cryptographic mechanisms that enable mutual identity verification.
Its structure can be presented in three layers:
Each certificate in the chain contains a digital signature — a hash of its contents encrypted with the issuer’s private key.
The browser verifies this signature using the public key from the parent certificate.
This process continues until the root is reached — the self-signed certificate stored locally in the system or browser.
If any link in the chain is invalid (e.g., missing intermediate or incorrect signature), the connection will be rejected.
The hierarchical PKI structure ensures both control and resilience.
Root CAs are physically isolated, often stored in specialized HSM modules and only activated when issuing new intermediates.
This minimizes the risk of root key compromise.
If an intermediate CA is compromised, the root can revoke it without disrupting the entire ecosystem.
Each certificate includes fields such as:
Administrators can view these fields locally:
openssl x509 -in cert.pem -noout -text
This allows easy inspection of the Issuer, algorithm, validity period, and signature chain.
The Root CA is the top of the PKI hierarchy — the “source of truth” from which everything begins.
It is a self-signed certificate that has no superior issuer.
Its public key is embedded in the operating system or browser as part of the trusted certificate store.
Root CAs typically have long lifespans — 20 to 30 years.
During this time, they issue several generations of intermediates.
Their private keys are kept in isolated HSM modules, with physical access tightly controlled.
Because of the immense trust they hold, root CAs are rarely activated — often only once a year or two, during a formal ceremony to issue a new Intermediate CA.
Every major ecosystem maintains its own root program:
A Root CA must meet strict requirements (operational security, WebTrust audit, CA/B Forum compliance) to be accepted.
In 2024–2025, many certificate providers (including Sectigo) began migrating from the historical USERTrust RSA Root CA to the new R46/E46 roots featuring longer keys and SHA-384 signatures.
For administrators, this means the old chain may be replaced by a new one, and outdated devices may experience validation errors.
To check which root your certificate uses:
openssl s_client -connect example.com:443 -showcerts
or use the HEXSSL SSL Checker tool, which automatically identifies the chain and its root anchor.
The Intermediate CA acts as a bridge between the root and the end-entity certificates.
These authorities are the ones that actually sign certificates for websites, APIs, or mail servers.
This setup allows the root CA to remain offline, while the infrastructure can flexibly issue and renew certificates.
The most frequent deployment error is the absence of a complete intermediate chain on the server.
As a result, the browser cannot build a full trust path and displays the error “incomplete chain”.
Correct configuration for Nginx:
ssl_certificate     /etc/ssl/certs/fullchain.pem;  
ssl_certificate_key /etc/ssl/private/domain.key;  
The fullchain.pem file must contain the domain certificate first, followed by all intermediates up to (but excluding) the root certificate.
In Apache, the equivalent configuration is:
SSLCertificateFile /etc/ssl/certs/domain.crt  
SSLCertificateChainFile /etc/ssl/certs/intermediate.crt  
SSLCertificateKeyFile /etc/ssl/private/domain.key  
Missing intermediate certificates can be instantly diagnosed using the HEXSSL SSL Checker, which analyzes the structure and correctness of the certificate chain.
Intermediate certificates usually have a validity period of 3–7 years, which allows rotation and the introduction of new algorithms.
When an intermediate expires, the root CA issues a new one — a transparent process for end users but critical for maintaining trust continuity.
When a user enters a website address and an HTTPS connection is established, the browser doesn’t simply check whether a certificate is present.
It performs a series of detailed checks to confirm that:
The validation process can be divided into several key steps:
Administrators can manually perform certificate validation using:
openssl verify -CAfile chain.pem cert.pem  
or directly from the server:
openssl s_client -connect example.com:443 -showcerts -verify 5  
The -verify parameter defines the validation depth (how many links the chain contains).
The output displays the full path to the root CA and the status of each link.
If you encounter unable to get local issuer certificate or self-signed certificate in chain, it indicates that the server isn’t sending the full intermediate chain.
Each ecosystem uses its own validation logic:
ca-bundle.crt file.cacerts keystore.Because of this, a configuration that works in one environment might fail in another.
We recommend testing deployments across multiple browsers and operating systems.
Trust validation is not limited to signatures and validity dates.
A certificate that was issued correctly can become invalid at any moment — for example, if its private key is compromised or it was issued in error.
For this reason, **revocation mechanisms** exist to verify whether a certificate has been revoked before its expiry date.
A CRL is the oldest and simplest revocation method.
The issuing CA periodically publishes a list of serial numbers for certificates that have been revoked.
Each certificate includes a CRL Distribution Points field containing the HTTP or LDAP URL where the list can be downloaded.
Checking a CRL locally:
openssl crl -in crl.pem -noout -text  
or
openssl verify -crl_check -CAfile ca.crt cert.pem  
Drawbacks of CRL:
In practice, CRLs are being replaced by OCSP.
—
OCSP allows real-time validation of a certificate’s status.
Instead of downloading an entire list, the client queries the CA’s OCSP responder with the certificate’s serial number and receives a signed reply: good, revoked, or unknown.
Example query using OpenSSL:
openssl ocsp -issuer intermediate.pem -cert cert.pem -url http://ocsp.sectigo.com  
To improve performance and avoid external network calls, a web server can attach the latest OCSP response directly to the TLS handshake — this is known as **OCSP stapling**.
The browser no longer needs to contact the CA’s OCSP server; it simply verifies the stapled, signed status.
Nginx example:
ssl_stapling on;  
ssl_stapling_verify on;  
ssl_trusted_certificate /etc/ssl/certs/ca-bundle.crt;  
resolver 8.8.8.8;  
It is also advisable to enable the **OCSP Must-Staple** extension, which requires a stapled response for every TLS session.
If the stapled response is missing, the browser will show an error.
Although not yet mainstream, these solutions indicate the future: moving away from heavy CRL files toward lightweight, continuously updated, and automated validation systems.
—
The PKI ecosystem is dynamic — roots expire, new algorithms appear, and browsers change their requirements.
To maintain compatibility, certificate authorities use **cross-signing**, issuing an intermediate certificate signed by two different roots.
Suppose a CA introduces a new root that is not yet trusted on older devices.
It issues an intermediate certificate signed by both the new and the old root.
New systems will use the new chain, while legacy ones can still rely on the old one — ensuring continuous trust.
Real-world example:
Let’s Encrypt used cross-signing between its new ISRG Root X1 and the older DST Root CA X3 to maintain compatibility with Android 7 and earlier.
While necessary, cross-signing can create ambiguity.
A browser may build multiple possible chains.
If one of the roots expires or is revoked, some users will encounter “certificate not trusted” errors.
A similar challenge arises during root migrations such as USERTrust RSA → R46/E46 (Sectigo).
The new root may not exist in older trust stores, so the CA keeps cross-signed intermediates for a transitional period.
Administrators should test their servers against both chains during this phase.
HEXSSL recommendations:
—
Imagine a server presenting the following certificates:
OpenSSL output:
depth=2 CN = USERTrust RSA Certification Authority  
verify return:1  
depth=1 CN = Sectigo RSA Domain Validation Secure Server CA  
verify return:1  
depth=0 CN = example.com  
verify return:1  
A status of verify return:1 means successful verification at all levels.
If instead you see:
verify error:num=20:unable to get local issuer certificate  
it indicates the local system does not know the appropriate root, or the intermediate was not sent by the server.
—
Beyond command-line tools like openssl, the easiest method is using the **HEXSSL SSL Checker**.
It analyzes not only the validity of the chain but also:
The HEXSSL Checker also generates a report with a security grade (A–F) and recommendations.
It can be integrated into TLS audits for NIS2 or ISO 27001 compliance.
In theory, implementing an SSL/TLS certificate seems simple — install the certificate, private key, and intermediate chain.
In practice, even a small configuration mistake can cause trust failures, browser warnings, or total connection loss.
Below are the most frequent issues observed during HEXSSL audits.
This is by far the most common issue, especially in legacy Apache, Tomcat, or load balancer setups.
The server presents only the leaf (domain) certificate but fails to send the intermediate(s).
Symptom:
Browser error: “certificate chain incomplete” or “unable to get local issuer certificate”.
Consequences:
Solution:
Always provide the **full chain** — the domain certificate plus all intermediates.
For Nginx:
ssl_certificate     /etc/ssl/certs/fullchain.pem;  
ssl_certificate_key /etc/ssl/private/domain.key;  
For Apache:
SSLCertificateFile      /etc/ssl/certs/domain.crt  
SSLCertificateChainFile /etc/ssl/certs/intermediate.crt  
Self-signed certificates are useful for testing or internal networks but provide no external trust.
Browsers will always flag them as untrusted.
Symptom:
“Your connection is not private” (NET::ERR_CERT_AUTHORITY_INVALID).
Consequences:
Solution:
Use certificates issued by recognized CAs — even free ones like Let’s Encrypt, unless organizational validation (OV/EV) is required.
For commercial sites, HEXSSL recommends Sectigo OV or EV certificates for full trust coverage.
Since 2017, browsers ignore the Common Name (CN) and rely exclusively on Subject Alternative Name.
Symptom:
The connection works for one hostname but not for aliases or subdomains.
Solution:
When generating the CSR, include all hostnames that the server will handle:
[ req ]  
default_bits       = 2048  
prompt             = no  
default_md         = sha256  
distinguished_name = dn  
req_extensions     = req_ext  
[ dn ]  
CN = www.example.com  
[ req_ext ]  
subjectAltName = @alt_names  
[ alt_names ]  
DNS.1 = www.example.com  
DNS.2 = example.com  
DNS.3 = api.example.com  
The HEXSSL CSR Generator automatically creates a CSR with the correct CN and SAN fields.
Certificates have a maximum lifetime of 398 days (1 year + 33 days).
Many incidents occur simply because the renewal was forgotten — especially in environments with dozens of domains.
Symptom:
“Certificate has expired” or “ERR_CERT_DATE_INVALID”.
Solution:
Use automated monitoring and renewal.
The HEXSSL SSL Expiry Monitor allows centralized expiry tracking and sends alerts before expiration.
Even with a valid certificate, some assets (images, JS, iframes) may still load over HTTP.
Symptom:
“This page is not fully secure” or a ⚠️ warning icon near the padlock.
Solution:
Force HTTPS for all resources:
Content-Security-Policy: upgrade-insecure-requests;  
In WordPress, enforce HTTPS in wp-config.php or use plugins like *Really Simple SSL*.
Occurs when the server presents an outdated OCSP response.
Symptom:
“OCSP response invalid” or “revocation check failed”.
Solution:
Clear the OCSP cache, fetch a fresh response, and ensure that ssl_trusted_certificate points to an up-to-date CA bundle.
Administrators should regularly test their implementations — not only after installation but also after each update, renewal, or CA migration.
openssl s_client -connect domain.tld:443 -showcerts  
openssl verify -CAfile ca-bundle.crt cert.pem  
openssl ocsp -issuer intermediate.pem -cert cert.pem -url http://ocsp.sectigo.com  
The **HEXSSL SSL Checker** performs all these steps automatically, presenting:
Example output:
Based on years of experience, HEXSSL recommends several principles that minimize risk and ensure compliance with NIS2, eIDAS 2.0, and ISO 27001.
A certificate is not merely a padlock icon.
Every element of the chain must be deliberate — CA choice, key strength, and algorithm.
Use trusted CAs, avoid self-signed certificates, and retest after every change.
Preferred algorithms today:
Avoid SHA-1 and RSA 1024 — they are deprecated and non-compliant with CA/B Forum standards.
Automate CSR generation, installation, and service reloads (nginx, apache).
For large-scale environments, consider ACME clients (e.g., certbot, acme.sh) with API integration.
The **HEXSSL SSL Expiry Monitor** supports multi-domain monitoring with configurable alerts:
Each audit should include:
HEXSSL also provides **SSL/TLS audit services** for server and cloud environments.
For details, contact our sales team via the contact form.
With the implementation of the NIS2 Directive and eIDAS 2.0 Regulation, SSL/TLS certificates have evolved from a technical feature to a **legal requirement**.
HEXSSL assists organizations in aligning TLS infrastructure with NIS2 and eIDAS requirements through audits, recommendations, and diagnostic tools (SSL Checker, OCSP Validator).
The SSL/TLS trust chain is the backbone of global online security.
Through PKI hierarchy and strict validation principles, it ensures not just encryption but verified identity and integrity.
A single weak or missing link can break user trust, trigger browser errors, and expose real risks.
Proper SSL/TLS deployment requires:
HEXSSL provides the tools and expertise to streamline every stage of the certificate lifecycle — from CSR generation to chain validation and expiry monitoring.
1. What’s the difference between a Root CA and an Intermediate CA?
Root CAs sign intermediate CAs, which in turn issue end-entity certificates.
The root is offline and trusted in the local store, while intermediates operate in production.
2. Why does my browser show “incomplete chain”?
Because the server does not present the full intermediate chain.
Add a fullchain.pem in your server configuration.
3. Is Let’s Encrypt as secure as paid certificates?
Yes, in terms of encryption strength.
The difference lies in validation — Let’s Encrypt offers DV only, while OV/EV include organizational verification and warranty.
4. How can I check which Root CA my certificate uses?
openssl s_client -connect domain.com:443 -showcerts  
or use the **HEXSSL SSL Checker** to automatically identify your root anchor.
5. Why does the browser not trust my HTTPS site?
The root CA may be missing in the trust store or the chain is incomplete.
Rebuild and verify the chain.
6. How often should SSL certificates be renewed?
Maximum validity is 398 days.
Renew yearly and automate monitoring with HEXSSL Expiry Monitor.
7. What is OCSP Stapling and should I enable it?
Yes — it improves performance and privacy by embedding signed revocation status in the TLS handshake.
8. Does EV provide stronger encryption?
No, encryption is the same as DV/OV.
EV adds deeper identity verification for trust and brand assurance.
9. What does “cross-signed” mean?
It means the same intermediate is signed by multiple roots, ensuring compatibility during root transitions.
10. How does HEXSSL support SSL/TLS management?
HEXSSL provides professional tools: