Verifying FIPS Compliance at Runtime
FIPS-Verifier scans container images and configurations to verify FIPS 140-3 compliance before deployment. It checks for CMVP-validated modules, approved algorithms, certificate validity, and configuration correctness.
CleanStart's FIPS-Verifier is the static compliance checker paired with FIPS-Traces (runtime monitoring).
Basic Usage
# Scan image for FIPS compliancecleanimg-init --fips-verifier --image myapp:1.0.0 # Output:# ✓ Base image is FIPS-validated (Ubuntu 24.04-fips)# ✓ OpenSSL module is CMVP #4949 (FIPS)# ✓ No non-FIPS crypto libraries detected# ✓ TLS configuration uses FIPS ciphers# ✓ Certificates use FIPS-approved hashing# ✓ Overall compliance: FIPS Level 3 ReadyDetailed Scans
Check CMVP Module Certification
To verify that your image uses CMVP-certified FIPS modules, run the CMVP check to see the certification status and tested algorithms:
# Verify FIPS modules used are CMVP-certifiedcleanimg-init --fips-verifier --image myapp:1.0.0 --check-cmvp # Output:# OpenSSL 3.0.10# CMVP Certification: #4949# Status: Active# Tested Algorithms:# ✓ AES-128/192/256 (GCM, CTR, CBC)# ✓ RSA-PSS, RSA-PKCS#1-v1_5# ✓ ECDSA, DSA# ✓ SHA-256, SHA-384, SHA-512# ✓ HMAC# Last Updated: 2024-03-15# Certificate: https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/4949Check TLS Configuration
When verifying TLS settings, ensure that only FIPS-approved cipher suites are enabled and that TLS version minimums are set appropriately:
# Verify TLS uses FIPS-approved settingscleanimg-init --fips-verifier --image myapp:1.0.0 --check-tls # Output:# TLS Configuration:# ✓ Minimum Version: TLSv1.2 (FIPS-approved)# ✓ Maximum Version: TLSv1.3 (FIPS-approved)# ✓ Enabled Cipher Suites (all FIPS-approved):# - ECDHE-RSA-AES256-GCM-SHA384# - ECDHE-RSA-AES128-GCM-SHA256# - DHE-RSA-AES256-GCM-SHA384# ✗ Disabled Non-FIPS Ciphers:# - RC4 (not FIPS-approved)# - DES (not FIPS-approved)# - ChaCha20-Poly1305 (not in validated mode)Check Certificates
When checking certificates, verify that the key size, signature algorithm, and validity dates all meet FIPS requirements:
# Verify certificates use FIPS-approved algorithmscleanimg-init --fips-verifier --image myapp:1.0.0 --check-certs # Output:# Certificate: /etc/nginx/certs/server.crt# ✓ Key Algorithm: RSA-2048 (FIPS-approved, >= 2048-bit required)# ✓ Signature Algorithm: sha256WithRSAEncryption (FIPS-approved)# ✓ Key Usage: Digital Signature, Key Encipherment# ✓ Valid Until: 2026-10-04 (not expired)# ✓ Issuer: CN=Company-CA# Certificate is FIPS-compliantCheck System Libraries
When scanning for cryptographic libraries, identify which ones are FIPS-validated and which are not:
# Scan for non-FIPS cryptographic librariescleanimg-init --fips-verifier --image myapp:1.0.0 --check-libs # Output:# System Cryptographic Libraries:# ✓ libcrypto.so.3 from /usr/lib/fips (FIPS-validated)# ✓ libssl.so.3 from /usr/lib/fips (FIPS-validated)# ✓ libgcrypt.so from /usr/lib (FIPS-compatible)# ✗ libnettle.so found (NOT FIPS-validated) - may be okay if not used for cryptoCompliance Levels
Report FIPS Compliance Level
# Get overall compliance levelcleanimg-init --fips-verifier --image myapp:1.0.0 --compliance-level # Output can be:# FIPS Level 1: Basic algorithm validation# FIPS Level 2: Tamper detection + CMVP modules (typical for servers)# FIPS Level 3: Tamper resistance (required for sensitive government)# FIPS Level 4: Tamper responsiveness (military/classified) # CleanStart achieves Level 2-3 with:# - CMVP-validated modules (OpenSSL #4949)# - Tamper detection via FIPS-Traces# - Secure key storagePolicy-Based Verification
Create Custom FIPS Policies
# fips-policy.yamlpolicies: required-fips-modules: - openssl:>= 3.0 required-tls-version: - minimum: TLSv1.2 - maximum: TLSv1.3 blocked-algorithms: - MD5 - SHA1 - DES - RC4 - RSA-PKCS#1 # deprecated, use PSS required-key-sizes: RSA: >= 2048 ECDSA: >= 256 AES: [128, 192, 256] certificate-validation: - require-sha256-or-better - require-valid-dates - require-trusted-caApply Policy
# Verify image against policycleanimg-init --fips-verifier \ --image myapp:1.0.0 \ --policy fips-policy.yaml # Output shows policy violations:# ✗ VIOLATION: RSA-1024 certificate found (policy requires >= 2048)# File: /etc/certs/old-cert.crt# Remediation: Regenerate with RSA-2048## ✓ All other policies passedIntegration with CI/CD
GitHub Actions Example
name: FIPS Compliance Check on: [pull_request, push] jobs: fips-verify: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build image run: docker build -t myapp:${{ github.sha }} . - name: FIPS Verification run: | cleanimg-init --fips-verifier \ --image myapp:${{ github.sha }} \ --policy .github/fips-policy.yaml \ --strict - name: Generate Report run: | cleanimg-init --fips-verifier \ --image myapp:${{ github.sha }} \ --report-format json \ --output fips-report.json - name: Upload Report uses: actions/upload-artifact@v3 with: name: fips-report path: fips-report.json - name: Comment on PR if: github.event_name == 'pull_request' run: | # Parse report and post to PR echo "FIPS Compliance Check Passed" >> $GITHUB_STEP_SUMMARYKubernetes Admission Controller
apiVersion: admissionregistration.k8s.io/v1kind: ValidatingWebhookConfigurationmetadata: name: fips-verifier-checkwebhooks:- name: verify-fips.company.com failurePolicy: Fail sideEffects: None admissionReviewVersions: ["v1"] clientConfig: service: name: fips-verifier namespace: default path: "/verify" rules: - operations: ["CREATE"] apiGroups: [""] apiVersions: ["v1"] resources: ["pods"]Reporting
Generate Compliance Report
# Generate detailed FIPS compliance reportcleanimg-init --fips-verifier \ --image myapp:1.0.0 \ --report-format html \ --output fips-compliance-report.html # Report includes:# - Executive summary (pass/fail)# - CMVP module validation status# - TLS configuration verification# - Certificate analysis# - Algorithm approval status# - Remediation recommendations# - Timestamp and signatureExport Machine-Readable Format
# JSON report for programmatic usecleanimg-init --fips-verifier \ --image myapp:1.0.0 \ --report-format json \ --output report.json # Can be parsed by scriptscat report.json | jq '.cmvp_modules[] | select(.status != "active")'Troubleshooting
FIPS Module Not Found
If the FIPS OpenSSL module isn't found in your image, verify it's installed and rebuild with the FIPS-enabled base image:
# Verify FIPS OpenSSL is installedldd /app/myapp | grep libcrypto# Should show: libcrypto.so => /usr/lib/fips/libcrypto.so # Solution: Rebuild image with FIPS OpenSSL# FROM ubuntu:24.04-fips# RUN apt-get install libssl3-fips openssl-fipsTLS Certificate Issues
When verifying TLS certificates, check the signature algorithm to ensure it's FIPS-approved:
# Check certificate validityopenssl x509 -in /etc/certs/server.crt -text -noout # Verify signature algorithm is FIPS-approvedopenssl x509 -in /etc/certs/server.crt -noout -text | grep "Signature alg"# Should show: sha256WithRSAEncryption (not md5WithRSAEncryption)Policy Violations
When policy violations occur, re-run with verbose output to see which rules fail:
# Re-run with verbose outputcleanimg-init --fips-verifier \ --image myapp:1.0.0 \ --policy fips-policy.yaml \ --verbose # Shows exactly which policy checks fail and whyCompliance Mapping
FIPS-Verifier evidence satisfies multiple compliance frameworks. For FIPS 140-3, it provides module validation certificates. For NIST 800-171, it addresses SC-13 (cryptographic controls). For FedRAMP, it provides SC-13 evidence. For PCI DSS, it satisfies Requirement 4.1 (strong cryptography). For HIPAA, it addresses § 164.312(a)(2)(i) (encryption controls).
Best Practices
- Verify Before Deployment: Run FIPS-Verifier in CI/CD pipeline to catch issues early
- Use Policies: Define organizational FIPS requirements as code
- Monitor Changes: Re-verify on updates to catch regressions
- Combine with Traces: FIPS-Verifier (static) + FIPS-Traces (runtime)
- Regular Updates: CMVP certifications change; rescan quarterly
See Also
FIPS Overview: fips-140-overview.md — FIPS fundamentals. FIPS-Traces: fips-traces.md — Runtime monitoring. Language Implementations: fips-language-implementations.md — Language-specific FIPS support.
