How can I trust CAcert's root certificate?
See also:
How to install CAcert root certificates on Windows systems, and
How to import CAcert root certificates into browser clients.
In order to have your browser or system automatically trust all certificates signed by the CAcert Certificate Authority, you must instruct your platform or browser to trust the CAcert root certificate http://www.cacert.org/index.php?id=3.
Note that for all systems, you will need to trust both the root certificate root_X0F.crt, as well as the class 3 certificate class3_x14E228.crt.
Some of this information is already covered in the BrowserClients article, so also look there to see if it has the information you need.
Trusting a new Certificate Authority is a process that varies from one platform to the next, so here are some of the ways to trust the CAcert root certificates. The instructions below will only outline how to trust one certificate, and just repeat the process to trust the second certificate.
WARNING: Always double-check the fingerprint on the downloaded certificates before trusting them. If you don't, you could be trusting a maliciously modified root certificate.
Contents
Mac OS X
There are two ways to trust the CAcert root certificates: one from the command line, and one from the Keychain GUI. Each method requires that you use an account with administrative privileges.
Using the Keychain GUI
Download the desired certificate to your desktop from here.
CAUTION: Verify the certificate fingerprints before proceeding!
- Open the certificate file, either using Command-O or by double-clicking on the file.
When Keychain appears, select the X509Anchors keychain.
You will be prompted to authenticate with your password to modify the system-wide X509Anchors keychain.
Using the command line
# Download the certificates curl -k -o "cacert-root.crt" "https://www.cacert.org/certs/root_X0F.crt" curl -k -o "cacert-class3.crt" "https://www.cacert.org/certs/class3_x14E228.crt" # # CAUTION: Verify the certificate fingerprints before proceeding! # # Import the certificates into the desired keychain sudo certtool i "cacert-root.crt" k=/System/Library/Keychains/X509Anchors sudo certtool i "cacert-class3.crt" k=/System/Library/Keychains/X509Anchors # Clean up after ourselves rm "cacert-root.crt" rm "cacert-class3.crt"
10.5 Leopard
If you're using 10.5 Leopard and try the certtool command above, you may see this error message:
*************************************************************** WARNING The keychain you are accessing, X509Anchors, is no longer used by Mac OS X as the system root certificate store. Please read the security man page for information on the add-trusted-cert command. New system root certificates should be added to the Admin Trust Settings domain and to the System keychain in /Library/Keychains. *************************************************************** ***Error adding certificate to keychain
The solution is to use the security command with add-trusted-cert instead:
sudo /usr/bin/security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain cacert-root.crt sudo /usr/bin/security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain cacert-class3.crt
Windows
Covering all of the ways to import this certificate into Windows is beyond the scope of this article, and is already covered by How to import CAcert root certificates into browser clients.
Windows: cygwin environment
There is no /etc/ssl; instead, you have to save it in /usr/ssl/certs, and under its special name.
wget "http://www.cacert.org/certs/root_X0F.crt" -O /usr/ssl/certs/5ed36f99.0
Location found using "strace wget https://somesite 2>&1 |grep ssl", which obviously fails, but you see the attempt to read a cert at this location.
WindowsMobile
Windows Mobile 5
On WindowsMobile2005 you need to download the DER-Encoded certificate (pocketIE cannot save it, so you need to store it in a zip-file for download). Then you'll need to rename it to .cer . Only then you will be able to install it with a double-click.
OBSOLETE - not valid for the new roots, SHA256 signed! You can also import new certificates using a CAB file in Windows Mobile. Generic instructions on how to make them can be found on the Windows Mobile blog. A prepared CAB file with both the Class 1 and Class 3 certificates can be found at http://jacob.steenhagen.us/CAcert.cab. This CAB, signed by Jacob Steenhagen's CAcert certificate, can simply be downloaded to your device and installed. You can verify the certificates are genuine by opening the CAB file and inspecting _setup.xml ensuring that the line before the <param/> (which contains the actual certificate) reads:
<characteristic type="135cec36f49cb8e93b1ab270cd80884676ce8f33">
for class 1 and:
<characteristic type="db4c4269073fe9c2a37d890a5c1b18c4184e2a2d">
for class 3. (Note: These should be verified against the Internet Explorer thumbprint at http://www.cacert.org/index.php?id=3). The previous thumbprints (MD-5) are valid for the old roots. Now you will find another thumbprints there, namely SHA1 and SHA256.
OBSOLETE - END
PocketPC2002
There is a tool contained in the zip-file downloadable at http://support.microsoft.com/default.aspx?scid=kb;en-us;322956 (pocketIE on a wm2005-device could not display the html-page here but another browser might do.). This tool will only work with Self-Issued certificates.
- Load the CA Cert into Internet Explorer as a trusted root.
- Export the certificate from IE as a DER encoded binary X.509 (.CER)
- Upload the file to your PocketPC
- In the File Manager, locate the uploaded certificate and click on it to open and import it.
- After loading the certificate, warm-reset the Pocket PC to make it read the new root certificate.
To verify the certificate has been successfully imported into the Pocket PC device:
- In the Settings menu, tap the "System" tab. Then tap "Certificates".
- Tap on the "Root" tab. You should now see the new CA Cert root certificate that you added.
Notes
(Note that for wap1.x-gateways there is no way to host encrypted wap-pages if your provider's wap-gateway does not have the certificate because it's not end-to-end but decrypted on the gateway, not the device.)
Linux
How your particular distribution will need to be modified to trust the CAcert root certificates will vary from one distribution to the next. However, there are some distributions about which we know some information, listed below.
The instructions for Red Hat 5+, Red Hat 4 and Fedora are topic of bug 1344: Wrong install instruction.
Knoppix: CD versions newer than 3.8 have the certificates already.
Red Hat 5+: wget -O - http://www.cacert.org/certs/root_X0F.txt >> /etc/pki/tls/certs/ca-bundle.crt (this will be overridden by updated openssl RPMs so it is likely not the best method)
Red Hat 4: Change the above location of ca-bundle.crt to /usr/share/ssl/certs/ca-bundle.crt
Fedora: Copy the certificate to /etc/pki/ca-trust/source/anchors/ then run update-ca-trust extract
The Bug1344 text explains furthermore:
RHEL 4 is deprecated and only supported under very special terms
for RHEL generation 7 the same instruction as for Fedora should be used
The correct call for Fedora is "update-ca-trust" instead of "update-ca-trust extract"
Otherwise, you can obtain the certificates from the website as usual, from here.
On ubuntu : try sudo apt-get install ca-certificates when the package is installed, you can do : dpkg-query -L ca-certificates to have the list of the root certs
Debian
As of March 2014, Debian no longer distributes CACert root certificates as part of Debian releases. Although a package is available in the unstable (sid) distribution (updated in 2019), it is inconvenient to use because you either have to check signatures manually or configure sid as package source.
Install from CAcert site manually (recommended)
Import CAcert root certificates using the following ("$" not be entered - is a prompt):
$ wget http://www.cacert.org/certs/root_X0F.crt http://www.cacert.org/certs/class3_x14E228.crt $ sudo cp root_X0F.crt /usr/local/share/ca-certificates/cacert-root.crt $ sudo cp class3_x14E228.crt /usr/local/share/ca-certificates/cacert-class3.crt $ sudo update-ca-certificates
This should output something like this:
$ sudo update-ca-certificates Updating certificates in /etc/ssl/certs... 2 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d.... Adding debian:cacert-class3.pem Adding debian:cacert-root.pem done. done.
Then, you are done. See man update-ca-certificates and /usr/share/doc/ca-certificates/README.Debian from the ca-certificates package for more information.
Install from unstable (sid via package management
You need to add unstable (sid) as a package source in a way that all packages are not considered to resolve versions, except ca-cacert.
Edit as root (so prepend sudo to editor command) file /etc/apt/preferences to contain
# Passivate unstable (sid) Package: * Pin: release o=Debian,a=unstable Pin-Priority: -10 # Allow ca-cacert from unstable (sid) but still prefer target release Package: ca-cacert Pin: release o=Debian,a=unstable Pin-Priority: 100
- Edit as root file /etc/apt/sources.list to contain (feel free to alter mirror according to preexisting entries)
deb http://ftp.de.debian.org/debian/ sid main # provides package ca-cacert
- Update package information and install package by running commands
sudo apt update sudo apt-get install ca-cacert
- Add trust to fresh certificates interactively running command
sudo dpkg-reconfigure ca-certificates
The certicates to mark as trusted are listed as
- CAcert/class3_x14E228.crt
- CAcert/root_X0F.crt
Install from unstable (sid) manually
Warning: Use this installation method only if you are prepared for cumbersome checking of signatures. The verified file can then be reused for later installs.
Search and download package from packages.debian.org with an expected name of the pattern ca-cacert_<version>_all.deb .
Manually check the signature of the downloaded file via Release.gpg as described in the Secure APT (Debian wiki)
- Install package running command
sudo dpkg -i <downloaded-package-file-name>
- Add trust to fresh certificates interactively running command
sudo dpkg-reconfigure ca-certificates
KDE
The CAcert root certificate can be added to KDE's certificate store so that all KDE applications, including Konqueror, will trust certificates signed by it.
- Download the certificate(s) in PEM or DER format.
In the KDE Control Center, under "Security & Privacy > Crypto," go to the "SSL Signers" page, and click "Import."
- Choose a certificate you downloaded.
- You may be asked whether to make the certificate available to KMail as well. This is recommended.
IMPORTANT! Find the certificate in the list (it may help to sort by "Organizational Unit" and then look for "http://www.cacert.org"), click on it, and verify that the MD5 digest shown at the bottom of the window matches the one shown on the download page.
Symbian
Nokia E61
Download the root and class 3 certificates in der format
- Copy the certificates to the E61 (the E61 cannot read the files direct from the web)
- Open each certificate in File Manager, and save the certificate. You will have to confirm this as the E61 believes that the certificates may be unsafe.
Java
$ keytool -keystore $/PATH/TO/CACERTS/KEYSTORE -storepass changeit -import -trustcacerts -v -alias cacertclass1 -file root_X0F.crt $ keytool -keystore $/PATH/TO/CACERTS/KEYSTORE -storepass changeit -import -trustcacerts -v -alias cacertclass3 -file class3_XOE.crt
Typical locations of the cacerts keystore:
- Linux Ubuntu: /usr/lib/jvm/java-$VERSION/jre/lib/security/cacerts
- Linux SuSE: /usr/java/jre$VERSION/lib/security/cacerts
Explanations:
- Name of the keystore file is "cacerts", its password is "changeit" (a clue for you to change this password).
- $/PATH/TO/CACERTS/KEYSTORE = placeholder of the path to the file named "cacerts", including the filename itself.
- $VERSION = Java version, examples:
- Linux Ubuntu: "7-openjdk-amd64" - thus the whole path including the filename is: /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/security/cacerts
- Linux SuSE: "1.8.0_71" - thus the whole path including the filename is: /usr/java/jre1.8.0_71/lib/security/cacerts
Acrobat Reader
See also AdobeReader.
Procedure for Acrobat 8:
Menu Document -> Manage Trusted Identities...
- Display: Certificates
- Button "Add COntacts..."
- "Browse" to the root certificates
- Edit trust to your liking. "Signatures and as trusted root" is the essential thing, the others are optional.
Android Phones & Tablets
Before Android version 4.0, with Android version Gingerbread & Froyo, there was a single read-only file ( /system/etc/security/cacerts.bks ) containing the trust store with all the CA ('system') certificates trusted by default on Android. Both system apps and all applications developed with the Android SDK use this. Use these instructions on installing CAcert certificates on Android Gingerbread, Froyo, ...
Starting from Android 4.0 (Android ICS/'Ice Cream Sandwich', Android 4.3 'Jelly Bean' & Android 4.4 'KitKat'), system trusted certificates are on the (read-only) system partition in the folder '/system/etc/security/' as individual files. However, users can now easily add their own 'user' certificates which will be stored in '/data/misc/keychain/certs-added'.
System-installed certificates can be managed on the Android device in the Settings -> Security -> Certificates -> 'System'-section, whereas the user trusted certificates are manged in the 'User'-section there. When using user trusted certificates, Android will force the user of the Android device to implement additional safety measures: the use of a PIN-code, a pattern-lock or a password to unlock the device are mandatory when user-supplied certificates are used.
Installing CAcert certificates as 'user trusted'-certificates is very easy. Installing new certificates as 'system trusted'-certificates requires more work (and requires root access), but it has the advantage of avoiding the Android lockscreen requirement.
CAcert user trusted certificates
Download the certificate files ('root_X0F.crt' and 'class3_x14E228.crt') onto the internal flash storage (the '/sdcard' or any subfolder). Browse to this folder with the file manager and open 'root_X0F.crt'. Although there might not be an icon for certificates and the files will have a '?'-icon, files will be opened with the certificate manager, asking you for a name to describe the to-be-imported certificate. If it is the first user certificate you install, the Android Security Model forces you to use a lock-screen to unlock your device (see "CAcert system trusted certificates" if you really need to avoid this) Repeat with the 'class3_x14E228.crt' file. Check if both certificate files are installed correctly, Settings -> Security -> Certificates -> 'User'-section should now list the certificates you have just installed.
CAcert system trusted certificates (without lockscreen)
The existing method of importing user certificates works fine, but it has the disadvantage that it requires a PIN / password lockscreen whenever user certificates are installed. By installing the CAcert certificates as system certificates, these files are better protected from tampering by malicious apps, and there is no lockscreen requirement (allows 'Slide to unlock' or no lock at all). You will need a rooted phone (or at least temporary root access), and a system with openssl software for creating the new certificates.
The next steps will show you how to create Android compatible certificate files from the original CAcert certificate files, how to install/import them on your android device, and how to verify everything is correctly installed.
It is possible, in Android OS version 4.4.2, to save certificates as user trusted ones (Android itself creates their correct names, derived from hashes), and then move them into the system trusted certs repository, using program for Android as Terminal, adb shell, or Ghost Commander. If you decide to follow this process, skip to the Importing paragraph replacing the source folder "/sdcard" used there, with the "/data/misc/keychain/cacerts-added" folder, where Android stores user trusted certificates. Do not copy CAcert roots, move them!
Creating
We will create Android compatible certificate files from the original CAcert certificate files.
Both files are prepared and ready to download, with their hashes to check, here.
Get the CAcert root certificates from the cacert.org website https://www.cacert.org/index.php?id=3 Download the root certificate PEM format (root_X0F.crt) and the Class 3 PKI key in PEM format (class3_x14E228.crt) Get the hash of the root_X0F.crt certificate:
openssl x509 -inform PEM -subject_hash_old -in root_X0F.crt | head -1
This shows you the hash, in the case of the CAcert PEM file 'root_X0F.crt' it is '5ed36f99' (note the use of '-subject_hash_old' instead of '-subject_hash', to get an openssl 0.9 compatible hash) We will use this hash value, append '.0' (dot zero) and use this as the filename for the resulting Android certificate:
cat root_X0F.crt > 5ed36f99.0 openssl x509 -inform PEM -text -in root_X0F.crt -noout >> 5ed36f99.0
Repeat these steps for the Class 3 PEM certificate file 'class3_x14E228.crt'. If things go well you will end up with the files 5ed36f99.0 and e5662767.0 (if you get the hash values 590d426f and 99d0fa06, you are not using the '-subject_hash_old' parameter to openssl).
The md5sum of the certificate files:
md5sum 5ed36f99.0 6ecc343c22ba3ba6ef817f0d8bd744e1 5ed36f99.0 md5sum e5662767.0 e2e7c5924103de7d2b93fef735176b45 e5662767.0
The sha1sum of the certificate files:
sha1sum 5ed36f99.0 8d9ca4e340ecf56911296b3c48b3a4969515b268 5ed36f99.0 sha1sum e5662767.0 915346ab8ea8a2a00e158afb8c03ce43c8745f16 e5662767.0
The sha256sum of the certificate files:
sha256sum 5ed36f99.0 a04100c5026e41cf6d79a4653495258afc02f1819d742a3f8af848e052036196 5ed36f99.0 sha256sum e5662767.0 239e3845dde6dba0a63b5e17d7365c27f0af27b51da2bddf293c54a84fa7f181 e5662767.0
Importing
We now have Android compatible certificate files, and we will import them into Android 'System' certificate store. It is necessary for you to gain the super-user rights to be able to write to / remove from / move between system subfolders. To achieve this, the Android system has to contain the "su" (super-user) program, which provides you with the super-user rights. Some phones' Android systems do not include this program. In such a case, you have to store all certificates added as the user ones.
Copy the files to the /sdcard folder, either with any file manager or with adb push. Go into adb shell (adb shell from commandline), or open the 'terminal'-application on your android device. You will get a command prompt similar like shell@android:/ $ Gain superuser/root rights, neccessary to perform privileged actions:
su
Make the /system folder writable (will return to read-only upon reboot):
mount -o remount,rw /system
Copy the new certificate files to the correct folder on your Android device:
cp /sdcard/5ed36f99.0 /system/etc/security/cacerts/ cp /sdcard/e5662767.0 /system/etc/security/cacerts/
Correct the file permissions to u=rw, g=r, o=r:
cd /system/etc/security/cacerts/ chmod 644 5ed36f99.0 chmod 644 e5662767.0
Check if the files are ok:
ls -al -Z
Omit '-Z' if you are using a version of Android without SElinux, it just shows some extra security settings which might be useful if you run into trouble.
Amongst the other default android certificate files, you will see the two new files:
-rw-r--r-- root root u:object_r:system_file:s0 5ed36f99.0 -rw-r--r-- root root u:object_r:system_file:s0 e5662767.0
The certificates will be loaded upon the next boot of your device, so reboot your device:
reboot
Verifying
To verify certificates are installed correctly, go to Settings -> Security -> Certificates. It should list both "CAcert Inc." and "Root CA" among the other certificates in the 'System' section. Make sure that these CAcert certificates are not also in the 'User' (user defined) section. From your android device, visit https://www.cacert.org. If you do not see a warning about missing or untrusted certificates, all went well.
Note that some browsers might use their own certificate store instead of the Android one, you might need to import certificate files into those browsers as well.
If you are unable to disable the Android PIN/Pattern lock screen after installing the system certificates, you might need to "Clear/delete credentials" (in Settings -> Security) even though you have removed all user certificates.
If you run into problems, compare the md5 sum of the certificate files with the md5 values in this article, check the file permissions of the newly installed files. Make sure no user certificates are installed (Settings -> Security -> Clear certificates), and make sure you are using a browser app that uses the android certificate store and does not implement an own certificate store.
In the future, newer versions of openssl might be used on Android, if so, you might need to drop the "_old"-part of the "-subject_hash_old" openssl parameter.
References
CyanogenMod forum with identical article by Sebastiaan Giebels
StackOverflow - user2708846 comment on how to create correct Android certificate files
Description of the ICS Trust Store Implementation by Nikolay Elenkov
Cyanogenmod wiki (old) - articke on adding a CA without requiring a PIN(makes the mistake of not using the certificate hash as filename)
StackExchange - Install CA without having to activate screen lock
Palm Pre (webOS)
Starting with webOS 1.2, the proceeding for adding the root certificates to the Palm Pre is extremely simple and can be done entirely on the phone.
Visit http://www.cacert.org/index.php?id=3 in the Pre's browser (http://www.cacert.org and click on Root Certificates)
Under Class 1, click the link for Root Certificate (PEM Format)
- A gray progress will appear at the bottom of the screen. Once the certificate is fully downloaded, an arrow will appear on the right side of the bar
Click on the bar containing root_X0F.crt and the aforementioned arrow
- The certificate manager will open giving you the ability to view detail and accept or reject the certificate
- Unfortunately, I don't see anything on that details screen to validate the fingerprint
- Click on the "Trust Certificate" button
Repeat for Class 3, Intermediate Certificate (PEM Format)
Note: prior to webOS 1.2 you had to copy the .crt files to the phone's memory using USB mode, load the certificate manager (Device Info; More Info (button at bottom); Certificate Manager (Preferences menu at top)), and import the certificates (icon in lower left of screen to browse for them).
How can I be sure that it is authentic?
There are many ways to ensure that you have an authentic, non-tampered copy of the root certificates, all of which boil down to having a trusted party verify the certificate fingerprints. In some cases, your system distribution is the trusted party, but you can also verify it for yourself.
- If your system is mentioned above, you can follow those instructions to ensure you have a authentic copy of the CAcert root certificates.
You can manually download and verify the certificates from here.
Finding the correct fingerprints
CAcert is working to provide multiple places to verify the certificate fingerprints. The following are already known ways to find authentic copies of the CAcert root certificate fingerprints.
You can decrypt the GPG signed message from here and compare the certificate fingerprints contained in the message with those contained in your downloaded certificates.
Obtain a copy printed on the AssuranceForms; ask for one at the next event.
Find them in the Impressum of Linux Magazin
CAcert is currently working on providing fingerprints through these additional means:
- Business cards with the fingerprints printed on them.
- Listing the fingerprints in additional magazines.