====== OpenSSL Command-Line Cheat Sheet ====== **Author**: Swift Griggs **Date**: October 9, 2025 This cheat sheet provides OpenSSL commands for inspecting, verifying, and managing SSL/TLS certificates and CA stores, with a focus on troubleshooting certificate verification issues (e.g., `unable to get local issuer certificate`) and configuring custom CA certificates on Oracle Linux (OEL) systems. ===== 1. Inspecting Certificates ===== Commands to view certificate details, useful for checking subjects, issuers, validity, and extensions. ==== 1.1 View Subject and Issuer ==== Display the subject and issuer of a certificate file. openssl x509 -in cert.pem -noout -subject -issuer * **Example output**: `subject=C=US, O=TestCo, OU=PKI, CN=TestCo Issuing CA` ==== 1.2 View Full Certificate Details ==== Show all certificate details, including extensions (e.g., Basic Constraints, Key Usage). openssl x509 -in cert.pem -noout -text * Use to check if a certificate is a CA (`CA:TRUE`) or self-signed (`subject = issuer`). ==== 1.3 Check Certificate Validity Dates ==== Display the certificate's validity period. openssl x509 -in cert.pem -noout -dates * **Example output**: `notBefore=Jun 5 19:02:35 2018 GMT` ==== 1.4 Get Certificate Fingerprint ==== Show the certificate's fingerprint for comparison. openssl x509 -in cert.pem -noout -fingerprint * Useful for verifying if two certificates are identical. ==== 1.5 Convert Certificate Format (DER to PEM) ==== Convert a DER certificate to PEM format. openssl x509 -inform der -in cert.der -out cert.pem ===== 2. Verifying Certificates ===== Commands to verify certificates against a CA store or specific CA file, including chain validation. ==== 2.1 Verify Certificate Against System CA Store ==== Verify a certificate using the system’s CA store directory. openssl verify -CApath /etc/pki/tls/certs/ -verbose -show_chain cert.pem * `-CApath`: Directory with hashed CA certificates. * `-show_chain`: Displays the certificate chain. * **Success**: `cert.pem: OK` * **Failure**: `error 20 at 0 depth lookup: unable to get local issuer certificate` ==== 2.2 Verify Certificate with Specific CA File ==== Verify a certificate using a specific CA bundle file. openssl verify -CAfile /etc/pki/tls/certs/ca-bundle.crt -verbose -show_chain cert.pem * Use when the CA store is a single file. ==== 2.3 Verify with Intermediate CA ==== Verify a certificate with an untrusted intermediate CA. openssl verify -CApath /etc/pki/tls/certs/ -untrusted intermediate.pem -verbose -show_chain cert.pem * `-untrusted`: Specifies intermediate CA(s) not in the trusted store. ==== 2.4 Verify with CRL Checking ==== Verify a certificate with Certificate Revocation List (CRL) checking. openssl verify -CApath /etc/pki/tls/certs/ -crl_check -CRLfile crl.pem cert.pem * Download CRL: `curl -o crl.pem ` ===== 3. Managing CA Stores ===== Commands to locate and manage the system’s CA trust store, especially for adding custom CAs. ==== 3.1 Find OpenSSL Configuration and CA Store ==== Show OpenSSL’s configuration directory and CA store location. openssl version -a * Look for `OPENSSLDIR` (e.g., `/etc/pki/tls`) and `SYSTEM_CIPHERS_FILE`. ==== 3.2 List CA Store Contents ==== List certificates in the CA store directory. ls -l /etc/pki/tls/certs/ | grep -i testco ls -l /etc/ssl/certs/ | grep -i testco * **Example**: `ls -l /etc/pki/tls/certs/ | grep -i testco` ==== 3.3 Search for CA Certificate Files ==== Find certificate files containing a specific string (e.g., “TestCo”). sudo find /etc -type f -name "*.crt" -exec grep -l "TestCo" {} \; sudo find /etc -type f -name "*.pem" -exec grep -l "TestCo" {} \; ==== 3.4 Check CA Bundle Contents ==== Inspect a CA bundle file for a specific CA. openssl crl2pkcs7 -nocrl -certfile /etc/pki/tls/certs/ca-bundle.crt | openssl pkcs7 -print_certs | grep -i testco * **Example**: `grep -i testco` ==== 3.5 Add Custom CA to Trust Store ==== Add a custom CA certificate to the system’s trust store (OEL10). sudo cp custom_ca.crt /etc/pki/ca-trust/source/anchors/ sudo update-ca-trust * Ensure `ca-certificates` package is installed: `sudo dnf install ca-certificates` ==== 3.6 Manually Hash CA Store ==== Hash certificates in the CA store directory for OpenSSL. sudo cp custom_ca.crt /etc/pki/tls/certs/ sudo c_rehash /etc/pki/tls/certs/ * Creates hashed symlinks (e.g., `6ed01128.0`). ===== 4. Troubleshooting Verification Issues ===== Commands to diagnose why certificate verification fails (e.g., `SSLCertVerificationError`). ==== 4.1 Trace OpenSSL File Access ==== Identify which CA files OpenSSL reads during verification. strace -e open,openat openssl verify -CApath /etc/pki/tls/certs/ -verbose cert.pem 2>&1 | grep -i cert * Look for `openat` calls to files like `/etc/pki/tls/certs/ca-bundle.crt`. ==== 4.2 Check Environment Variables ==== Verify if custom CA paths are set. echo $SSL_CERT_FILE echo $SSL_CERT_DIR * If set, these override the default CA store. ==== 4.3 Test Server Certificate Chain ==== Extract and inspect a server’s certificate chain (e.g., for proxy issues). openssl s_client -connect :443 -showcerts server_certs.pem openssl x509 -in server_certs.pem -noout -text | grep -i testco * **Example**: `openssl s_client -connect pki.testco.com:443 -showcerts` ==== 4.4 Check OpenSSL Configuration ==== View the OpenSSL configuration file. sudo cat /etc/pki/tls/openssl.cnf * Check for CA paths (e.g., `dir = /etc/pki/CA`). ==== 4.5 Check Crypto Policies ==== Verify FIPS or crypto policy settings (OEL10). cat /etc/crypto-policies/back-ends/opensslcnf.config * Adjust policy if needed: `sudo update-crypto-policies --set DEFAULT` ===== 5. Application-Specific Fixes ===== Commands to address application issues (e.g., `pip` SSL errors). ==== 5.1 Fix `pip` SSL Verification ==== Use a custom CA file or proxy for `pip`. pip install --cert /etc/pki/tls/certs/ca-bundle.crt some_package export HTTPS_PROXY="http://proxy.example.com:port" pip install --proxy http://proxy.example.com:port some_package ==== 5.2 Temporary Trust for Testing ==== Temporarily trust a CA file without modifying the system. export SSL_CERT_FILE=custom_ca.crt openssl verify -CAfile custom_ca.crt cert.pem ===== Notes ===== * **OEL10 Specifics**: Uses `p11-kit` and `ca-certificates` for CA trust management. Always use `sudo update-ca-trust` to update the trust store. * **FIPS Mode**: Ensure certificates use FIPS-compliant algorithms (e.g., SHA-256, RSA ≥ 2048 bits). * **CRL Checking**: If CRLs are required, download from URLs in certificate extensions (e.g., `http://pki.testco.com/cdp/TestCo%20Root%20CA.crl`). * **Permissions**: Run CA store updates as root (`sudo`) to avoid permission errors.