PuTTY-CAC is a free SSH client for Windows that supports smartcard authentication using the US Department of Defense Common Access Card (DoD CAC) as a PKI token.


2012-09-18: the source code has been moved to github at https://github.com/risacher/putty-cac. This version is synchronized with PuTTY-0.62, and also includes support for Microsoft's Cryprographic API (CAPI). CAPI support should be easier to configure for most users and also allows use of soft-certs. Use of CAPI instead of PKCS#11 is now recommended.



Source is at https://github.com/risacher/putty-cac


PuTTY-CAC is derived from PuTTY and PuTTY SC. (See below for the pedigree.) It should support other smartcards as well, but has not been tested to do so.

PuTTY-CAC was developed by Dan Risacher.

U.S. Department of Defense users can also obtain this software from https://software.forge.mil/sf/projects/community_cac

CAPI configuration

PCKS#11 Configuration

Use the "Pkcs11" panel to configure PuTTY SC for smartcard usage.
Note: these settings are used by the SSH agent as well.

Unfortunately, some PKCS#11 middleware does not work well with this dialog, and the configuration dialog does not work properly. In addition to the "SSH Keystring" box in the user interface, the public key can be exported via the event log of PuTTY (it's written as a base64 encoded string to the event log when connecting to the server). Just copy/paste this string.
It should look like'ssh-rsa AAAAB3NzaC1yc2EAAAA.....ZHkknlDE7jhQ== token-key'.

PKCS#11 Middleware

In my testing, the PKCS#11 library files, Token labels, and Certificate labels corresponding to the PKCS#11 middlewares were:

Please email me with others if you learn them.


PuTTY is a free implementation of Telnet and SSH for Win32 and Unix platforms, along with an xterm terminal emulator. It is written and maintained primarily by Simon Tatham.

PuTTY is great, but I thought it would be cooler if it could use PKI tokens for authentication.

PuTTY SC is a free implementation of SSH for Win32 platform. It was developed by Pascal Buchbinder. This modified version of PuTTY supports RSA keys held on a smartcard or usb token for authentication. The interface is based on PKCS #11 and you need the appropriate library (.dll) of the manufacturer of your smartcard in order to use PuTTY SC.

PuTTY SC is pretty cool too, but the implementation makes a critical assumption about the smartcard that isn't always true: namely, that the smartcard contains the public key as an independent object. The DoD CAC program issues tokens that include private keys and public certificates, but does not include public keys as distinct objects. Public certificates include public keys, but the implementation in PuTTY SC will not extract those public keys from the certificates. PuTTY-CAC fixes this.

PuTTY-CAC is based on PuTTY SC, but adds the capability to extract public keys from certificates on the card if the public key is not available as a distinct object.

Other implementation notes:

PuTTY SC, upon which PuTTY-CAC is based, includes some windows-specific code (for loading the PKCS#11 library) which causes it to lose the cross-platform nature of the original PuTTY. As a Mac and Linux user, I'd love to fix this, but I haven't done so.

X.509, the ITU-T standard for public key certificates, leaves a disturbing amount of flexibility. It's not clear that the assumptions that I made in extracting public keys from certificates will always hold. I tested with several DoD CAC cards, but nothing else. I'd like to get feedback on whether PuTTY CAC works with other PKI implementations.

PKCS#11 Libraries: PuTTY CAC was tested with the Litronics NetSign CAC middleware, and with the ActivIdentity ActivClient CAC middleware. Feedback is requested by the author on whether it works or not with other middleware.

Licensing: The basic PuTTY source code is licensed under the MIT license. PuTTY SC is licensed under the GNU General Public License (GPL). The PuTTY-CAC enhancements were written by a direct employee of the United States Federal Government, and as such, those enhancements are a declared work of the United States Government and are not subject to copyright protection. A binary, compiled version is a derivative work of all three sources, and should be considered GPL licensed.

Projects page, Dan Risacher