Skip to main content
CleanStart

Knowledge Hub

FIPS-Verifier: Automated Cryptographic Compliance Validation

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 Ready

Detailed 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/4949

Check 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-compliant

Check 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 crypto

Compliance 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 storage

Policy-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-ca

Apply 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 passed

Integration 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_SUMMARY

Kubernetes 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 signature

Export 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-fips

TLS 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 why

Compliance 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

  1. Verify Before Deployment: Run FIPS-Verifier in CI/CD pipeline to catch issues early
  2. Use Policies: Define organizational FIPS requirements as code
  3. Monitor Changes: Re-verify on updates to catch regressions
  4. Combine with Traces: FIPS-Verifier (static) + FIPS-Traces (runtime)
  5. 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.