on
02-03-2026
08:29 AM
- edited on
03-10-2026
12:23 PM
by
Tyler Langston
Welcome to another article in our series about ThousandEyes!
This article will guide you through identifying, diagnosing, and resolving common SSL certificate problems when running ThousandEyes Enterprise Agents on Catalyst 9000 Series switches.
SSL Certificate Errors on Cat 9k – What are they?
Before we get further into it, let’s cover certificates and certificate chains; what they are and why they’re important.
SSL/TLS certificates are digital documents that authenticate the identity of websites and encrypt data transmitted between clients and servers. ThousandEyes Enterprise Agents must validate these certificates to ensure secure communication.
What are Certificate Chains? How Do They Work?
A certificate chain is a series of certificates that provide verification of authenticity and trust at each step. Each certificate is ‘signed’ by the next certificate’s issuer, ensuring an unbroken chain of trust back to the root Certificate Authority (CA). This process is essential for secure communications and preventing those ‘untrusted connection’ warnings that can derail your day.
A typical certificate chain consists of:
When an Enterprise Agent connects to an HTTPS endpoint:
With our basics covered, let’s review some background you’ll need. This article assumes you have the following knowledge, tools and access:
-x <proxy-ip>:<proxy-port>
Tip: To learn how to verify your proxy settings, please refer to our guide: Verifying Proxy Configurations for ThousandEyes Enterprise Agents.
Important Note: ThousandEyes Docker-based Enterprise Agents on Cisco devices using Cisco Application Hosting Framework (CAF) version 5.1.2 are built on Alpine Linux. The commands and procedures in this article are specifically tailored for that environment.
Note: Throughout this guide, we utilize badssl.com for demonstration purposes. This website is specifically designed to simulate various SSL certificate errors, allowing for consistent and clear reproduction of the issues discussed.
With all that said, let’s get into it!
To troubleshoot and diagnose SSL certificate issues on Alpine Linux-based Enterprise Agents, we will primarily utilize te-agent-utils (which includes te-curl) for network diagnostics. We will also be using OpenSSL to perform in-depth analysis of certificate chains and extract certificate details (such as issuer, subject, and validity).
Before proceeding with any diagnosis, ensure you have access to your agent's container, and that the necessary tools are installed:
Step 1: Access the agent container from the Cat 9k CLI
app-hosting connect appid <your-agent-name> session /bin/bash
Step 2: Install diagnostic utilities within the agent container
apk update apk add openssl apk add te-agent-utils
Important: To minimize potential risks, we strongly recommend you remove OpenSSL from the agent after troubleshooting is complete.
To remove OpenSSL:
apk del openssl
What it means:
The Enterprise Agent received the server's SSL certificate but cannot build a complete chain of trust back to a root certificate in its trusted certificate store. This is the most common SSL error.
When this occurs:
How to diagnose:
Step 1: Test the target URL and identify the error
te-curl -v https://your-failing-target.com:port
If using a proxy (see Pre-Reqs 4):
te-curl -v https://your-failing-target.com:port -x <proxy-ip>:<proxy-port>
Example:
Step 2: Display the Certificate Chain:
Building on our understanding from Step 1 that a certificate validation error is occurring, the next step is to review the certificate chain being presented by the server. This will help identify the specific point of failure, such as a missing intermediate certificate or an untrusted issuer. We can do this in a few different ways:
Option A: Using OpenSSL
For detailed certificate chain analysis, OpenSSL is a great way to analyze the server's certificate.
openssl s_client -connect your-target.com:port -servername your-target.com
If using a proxy:
openssl s_client -connect your-target.com:port -servername your-target.com -proxy <proxy-ip>:<proxy-port>
Note: When using openssl s_client, if there are more than two certificates in the chain, it may not display the 3rd+ certificate in PEM format directly in the initial output.
Key information:
From the output of information from this command, check for the following indicators of an incomplete chain:
Option B: Using External Online Tools
For publicly accessible sites, you can utilize online SSL server test tools. These can provide a definitive view of the complete certificate chain as presented by the server. These tools often provide detailed chain validation and identify missing intermediates.
Some of the online tools we’ve used are:
Option C: Extracting from a Web Browser
Most browsers allow you to inspect certificate details and view the complete certificate chain. This method is useful for both public and internal sites accessible from your workstation. Just browse to the target URL using a web browser and click the padlock icon in the address bar!
With our errors identified, diagnostic information gathered and certificate chain in hand, review the three scenarios below to determine which one is present and how to solve.
| Scenario | Indicators | Solution |
| A: Internal PKI |
|
Add your organization's root CA certificate to the agent |
| B: SSL Decrypting Proxy |
|
Add proxy signing certificate to the agent Installing CA Certificates on Enterprise Agents. |
| C: Server Misconfiguration |
|
Preferred: Fix server to send complete certificate chain. |
What it means:
The target server uses a certificate that was signed by itself rather than a recognized Certificate Authority. The certificate's Issuer and Subject are identical.
When this occurs:
How to diagnose:
Step 1: Test the connection and identify the error
te-curl -v https://your-failing-target.com:port
If using a proxy:
te-curl -v https://your-failing-target.com:port -x <proxy-ip>:<proxy-port>
Example:
Step 2: Verify the certificate with OpenSSL:
To confirm the certificate is indeed self-signed, you can extract and examine its details:
echo quit | openssl s_client -showcerts -servername your-target.com \ -connect your-target.com:port > self-signed-cert.pem openssl x509 -text -noout -in self-signed-cert.pem | grep -A2 "Issuer\|Subject"
If using a proxy:
echo quit | openssl s_client -showcerts -servername your-target.com \ -connect your-target.com:port -proxy <proxy-ip>:<proxy-port> > self-signed-cert.pem openssl x509 -text -noout -in self-signed-cert.pem | grep -A2 "Issuer\|Subject"
Example:
Notice that the Issuer and Subject fields are identical, confirming that the certificate is self-signed.
Solution:
To resolve this, you need to add the self-signed certificate to the Enterprise Agent's trusted certificate store.
What it means:
The certificate's validity period has ended. Certificates have a "Not After" date, and the current date is past that date.
How to diagnose:
Step 1: Test the connection and identify the error
te-curl -v https://your-failing-target.com:port
If using a proxy:
te-curl -v https://your-failing-target.com:port -x <proxy-ip>:<proxy-port>
Example:
Step 2: Check expiration with OpenSSL:
To confirm the expiration date, use OpenSSL to extract the dates from the certificate.
echo | openssl s_client -connect your-target.com:port -servername your-target.com 2>/dev/null | openssl x509 -noout -dates
If using a proxy:
echo | openssl s_client -connect your-target.com:port -servername your-target.com -proxy <proxy-ip>:<proxy-port> 2>/dev/null | openssl x509 -noout -dates
Example:
Now that you've confirmed the certificate is expired, the next step depends on who owns the server. You need to determine if the target is a service managed by your organization or an external, third-party service.
Once you know who is responsible for the server, select the appropriate action from the table below.
Solution:
| If it's... |
Action |
|
Your server |
Renew the certificate with your CA and install the new one on the server |
|
Third-party server |
Contact the site administrator to renew their certificate |
|
Temporary workaround |
Disable certificate verification in test settings (not recommended for production) |
What it means:
The hostname in your URL doesn't match the Common Name (CN) or Subject Alternative Names (SANs) in the certificate.
How to diagnose:
Step 1: Test the connection and identify the error
te-curl -v https://your-failing-target.com:port
If using a proxy:
te-curl -v https://your-failing-target.com:port -x <proxy-ip>:<proxy-port>
Example:
Step 2: Check the certificate's Subject and SANs with OpenSSL
openssl s_client -connect your-target.com:port -servername your-target.com 2>/dev/null | openssl x509 -noout -text | grep -A5 "Subject:\|Subject Alternative Name"
If using a proxy:
openssl s_client -connect your-target.com:port -servername your-target.com -proxy <proxy-ip>:<proxy-port> 2>/dev/null | openssl x509 -noout -text | grep -A5 "Subject:\|Subject Alternative Name"
Example:
Solutions:
|
Scenario |
Action |
|
Using wrong URL |
Update your ThousandEyes test to use the correct hostname from the certificate |
|
Certificate missing SAN |
Server administrator needs to reissue certificate with all required hostnames in SANs |
|
Load balancer/proxy issue |
Check that load balancer is sending correct SNI (Server Name Indication) |
We hope you’ve found this guide helpful in troubleshooting some of the most common certificate issues & SSL errors we see on Catalyst9000 Series Switches. We’ve included some additional resources below that we find helpful.
Additional Resources:
ThousandEyes Documentation
SSL/TLS Testing Tools
ThousandEyes SSL Certificate Checker:
ThousandEyes provides built-in SSL certificate monitoring. In your test results, click Response Details → TLS Session tab to see:
Additional Support
For assistance with SSL certificate issues beyond what's covered in this article:
Thank You for sharing!
Find answers to your questions by entering keywords or phrases in the Search bar above. New here? Use these resources to familiarize yourself with the community: