Erorile de certificate SSL/TLS pot defecta aplicatiile si bloca deploy-urile. Acest ghid acopera toate problemele comune de certificate si solutiile lor.
Eroare: Certificatul a Expirat
Simptom:
curl: (60) SSL certificate problem: certificate has expired
javax.net.ssl.SSLHandshakeException: Certificate expired
NET::ERR_CERT_DATE_INVALID
Solutia 1 - Verifica expirarea:
# Verifica expirarea certificatului
openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -dates
# Sau folosind curl
curl -vI https://example.com 2>&1 | grep -i "expire"
# Verifica fisierul de certificat local
openssl x509 -enddate -noout -in /path/to/cert.pemSolutia 2 - Reinnoieste cu Let's Encrypt:
# Folosind certbot
sudo certbot renew
# Forteaza reinnoirea
sudo certbot renew --force-renewal
# Test fara executie reala
sudo certbot renew --dry-run
# Dupa reinnoire, restarteaza serviciile
sudo systemctl reload nginxSolutia 3 - Configurare auto-reinnoire:
# Job cron pentru auto-reinnoire
echo "0 0,12 * * * root certbot renew --quiet" | sudo tee /etc/cron.d/certbot
# Timer systemd (preferat)
sudo systemctl enable certbot.timer
sudo systemctl start certbot.timerEroare: Certificat Auto-Semnat Neincrezator
Simptom:
SSL certificate problem: self-signed certificate
unable to verify the first certificate
DEPTH_ZERO_SELF_SIGNED_CERT
Solutia 1 - Adauga CA in trust store:
# Linux (Ubuntu/Debian)
sudo cp custom-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
# Linux (CentOS/RHEL)
sudo cp custom-ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust
# macOS
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain custom-ca.crtSolutia 2 - Configureaza aplicatia:
# curl - specifica bundle-ul CA
curl --cacert /path/to/ca-bundle.crt https://internal-server.local
# Node.js
export NODE_EXTRA_CA_CERTS=/path/to/ca.pem
# Python requests
export REQUESTS_CA_BUNDLE=/path/to/ca-bundle.crt# Python cu CA custom
import requests
response = requests.get('https://internal.local', verify='/path/to/ca.crt')
# Sau dezactiveaza verificarea (NU pentru productie!)
response = requests.get('https://internal.local', verify=False)Solutia 3 - Docker cu CA custom:
FROM python:3.12
# Adauga certificat CA custom
COPY custom-ca.crt /usr/local/share/ca-certificates/
RUN update-ca-certificates
# Node.js necesita cale explicita
ENV NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/custom-ca.crtEroare: Nepotrivire Hostname
Simptom:
SSL: CERTIFICATE_VERIFY_FAILED certificate verify failed: Hostname mismatch
The certificate is not valid for the requested host
NET::ERR_CERT_COMMON_NAME_INVALID
Cauza: Certificat emis pentru un domeniu diferit.
Solutia 1 - Verifica domeniile certificatului:
# Vizualizeaza SAN-urile certificatului (Subject Alternative Names)
openssl s_client -connect example.com:443 2>/dev/null | \
openssl x509 -noout -text | grep -A1 "Subject Alternative Name"
# Detalii complete certificat
echo | openssl s_client -connect example.com:443 2>/dev/null | \
openssl x509 -noout -textSolutia 2 - Emite certificat cu numele corecte:
# Let's Encrypt cu domenii multiple
sudo certbot certonly --nginx \
-d example.com \
-d www.example.com \
-d api.example.com
# Auto-semnat cu SAN
openssl req -x509 -newkey rsa:4096 -sha256 -days 365 \
-nodes -keyout server.key -out server.crt \
-subj "/CN=example.com" \
-addext "subjectAltName=DNS:example.com,DNS:www.example.com,DNS:*.example.com"Eroare: Lant de Certificate Incomplet
Simptom:
unable to get local issuer certificate
SSL certificate problem: unable to get issuer certificate
The certificate chain is incomplete
Solutia 1 - Include certificatele intermediare:
# Descarca certificatul intermediar de la CA
wget https://letsencrypt.org/certs/lets-encrypt-r3.pem
# Concateneaza in ordinea corecta
cat server.crt intermediate.crt > fullchain.crt
# Verifica lantul
openssl verify -CAfile ca-bundle.crt fullchain.crtSolutia 2 - Verifica completitudinea lantului:
# Tool online
# https://www.ssllabs.com/ssltest/
# Verificare CLI
openssl s_client -connect example.com:443 -showcerts
# Ar trebui sa vezi certificate multiple in outputSolutia 3 - Configurare Nginx:
server {
listen 443 ssl;
server_name example.com;
# Lantul complet, nu doar certificatul server
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}Eroare: Versiune TLS Nesuportata
Simptom:
SSL routines:ssl3_get_record:wrong version number
tlsv1 alert protocol version
sslv3 alert handshake failure
Solutia 1 - Verifica versiunile TLS suportate:
# Testeaza TLS 1.2
openssl s_client -connect example.com:443 -tls1_2
# Testeaza TLS 1.3
openssl s_client -connect example.com:443 -tls1_3
# Vizualizeaza protocolul negociat
curl -v https://example.com 2>&1 | grep "SSL connection"Solutia 2 - Configureaza serverul pentru TLS modern:
# Nginx - doar TLS 1.2 si 1.3
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;Solutia 3 - Configurare client:
# Python - forteaza TLS 1.2+
import ssl
import urllib.request
ctx = ssl.create_default_context()
ctx.minimum_version = ssl.TLSVersion.TLSv1_2
response = urllib.request.urlopen('https://example.com', context=ctx)// Node.js
const https = require('https');
const agent = new https.Agent({
minVersion: 'TLSv1.2'
});Eroare: Certificat Revocat
Simptom:
certificate revoked
NET::ERR_CERT_REVOKED
SSL_ERROR_REVOKED_CERT_ALERT
Solutia 1 - Verifica statusul revocarii:
# Obtine URL-ul responder-ului OCSP
openssl x509 -in cert.pem -noout -ocsp_uri
# Verifica statusul OCSP
openssl ocsp -issuer chain.pem -cert cert.pem \
-url http://ocsp.example.com -resp_textSolutia 2 - Emite un certificat nou:
# Certificatele revocate nu pot fi de-revocate
# Genereaza CSR nou si solicita certificat nou
openssl req -new -key server.key -out new-server.csr
# Solicita de la CA sau Let's Encrypt
sudo certbot certonly --nginx -d example.comEroare: Nepotrivire Cheie Privata
Simptom:
SSL_CTX_use_PrivateKey_file failed
key values mismatch
(SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)
Solutie - Verifica potrivirea cheie-certificat:
# Obtine modulul din certificat
openssl x509 -noout -modulus -in cert.pem | openssl md5
# Obtine modulul din cheia privata
openssl rsa -noout -modulus -in key.pem | openssl md5
# Aceste hash-uri MD5 trebuie sa coincida!Regenereaza perechea potrivita daca este necesar:
# Genereaza cheie privata noua
openssl genrsa -out new-server.key 4096
# Creeaza CSR
openssl req -new -key new-server.key -out new-server.csr
# Auto-semneaza sau trimite CSR-ul la CA
openssl x509 -req -days 365 -in new-server.csr \
-signkey new-server.key -out new-server.crtConfigurari Comune de Servicii
Nginx:
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/ssl/certs/fullchain.pem;
ssl_certificate_key /etc/ssl/private/privkey.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;
# HSTS
add_header Strict-Transport-Security "max-age=63072000" always;
}Apache:
<VirtualHost *:443>
ServerName example.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
SSLCertificateChainFile /etc/ssl/certs/chain.crt
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
SSLHonorCipherOrder off
</VirtualHost>Referinta Rapida: Comenzi de Depanare
| Actiune | Comanda |
|---------|---------|
| Verifica expirare | openssl x509 -enddate -noout -in cert.pem |
| Vizualizeaza certificat | openssl x509 -text -noout -in cert.pem |
| Testeaza conexiune | openssl s_client -connect host:443 |
| Verifica lant | openssl verify -CAfile ca.crt cert.pem |
| Verifica potrivire cheie | openssl x509 -modulus -noout -in cert.pem \| md5 |
| Descarca certificat | echo \| openssl s_client -connect host:443 2>/dev/null \| openssl x509 > cert.pem |
Consultanta Securitate SSL/TLS?
Managementul certificatelor la scara larga necesita automatizare si expertiza. Echipa noastra ofera:
- Automatizarea ciclului de viata al certificatelor
- Proiectarea infrastructurii PKI
- Implementarea arhitecturii zero-trust
- Auditare de conformitate (PCI-DSS, HIPAA)
Obtine ajutor pentru securitatea SSL
Sistemul tau AI e conform cu EU AI Act? Evaluare gratuita de risc - afla in 2 minute →