#certificate #firefox #mtls #x509 #pkcs11 #configuration #configuration-management

ff-carl

A simple utility library to automate Firefox' mTLS host:certificate assignment (ClientAuthRememberList.bin) file

1 unstable release

0.1.1 Feb 21, 2024
0.1.0 Feb 20, 2024

#417 in Authentication

34 downloads per month

MPL-2.0 license

17KB
160 lines

FF-CARL

A utility library for automating Firefox' mTLS host:certificate preference assignment file (ClientAuthRememberList.bin).

Overview

This should be paired with policies.json certificate configuration management as per Firefox policy-templates, particularly a Certificates -> Install stanza for filesystem resident certs and/or a SecurityDevices stanza for PKCS#11 resident certs.

For its configuration, FF-CARL currently requires x509 client certificates to be in DER format. The library will panic if the certificate bytes are not that of DER encoding, or if the DER certificate is otherwise unable to be parsed. Please be aware that the DER certificate being used for configuration doesn't need to be the very same certificate known to Firefox, just a DER encoded version of it!

Example

Pull in the lib using your Cargo.toml file:

[dependencies]
ff-carl = "0.1.0"

And run an example (being sure to appropriately substitute filesystem paths):

use ff_carl::write_entry;
use ff_carl::EntryArgs;
use std::path::PathBuf;

fn main() -> Result<(), std::io::Error> {
     let der_cert = std::fs::read("/path/to/cert.der").unwrap();
     let entry_args = EntryArgs::new(
         "https", // scheme
         "mtls.cert-demo.com", // ascii_host
         443, // port
         "cert-demo.com", // base_domain
         der_cert.as_ref(), // DER cert byte array
     );

     let backing_path = PathBuf::from("/path/to/firefox/profile/ClientAuthRememberList.bin");

     write_entry(entry_args, backing_path)
}

To write multiple host:certificate ClientAuthRememberList Entry values, use the ff_carl::write_entries function.

Dependencies

~5MB
~100K SLoC