PKCS#11 support for openssh

Alon Bar-Lev alon.barlev at gmail.com
Fri Nov 18 23:26:59 EST 2005


Roumen Petrov wrote:
> Alon,
> 
> you should improve security of code. I already sent some notes offlist.
> 
> 

Hello,

Attached is a new version modified according to Roumen 
Petrov's helpful comments.

For those of you that did not follow this thread:

The PKCS#11 patch modify ssh-add and ssh-agent to support 
PKCS#11 private keys and certificates.

It allows using multiple PKCS#11 providers at the same time, 
selecting keys by id, label or certificate subject, handling 
card removal and card insert events, handling card re-insert 
to a different slot, supporting session expiration.

A valid X.509 certificate should exist on the token, without 
X.509 support it is exported as regular RSA key. Self-signed 
certificates are treated as RSA key and not as X.509 RSA 
key. There is a simple utility Timo Felbinger wrote 
(http://www.timof.qipc.org/x509toOpenSSH.c) that extracts 
ssh public key from X.509 certificate.

If you like X.509 support apply the X.509 patch *AFTER* the 
PKCS#11 patch. There are minor rejects that can be easily 
corrected by:
$ autoreconf -i -v

One significant change is that the ssh-agent prompts for 
passwords now... So you need to configure it with a program 
that asks for card insert or PIN, a program such as 
x11-ssh-askpass. Current implementation (ssh-add asks for 
passwords) is not valid for dynamic smartcard environment.

Current implementation uses the askpin program also for 
prompting card insert... Don't be confused, it only expects 
ok or cancel, attached is a simple scripts that uses kde in 
order to display these dialogs.

A common scenario is the following:

$ ssh-agent xterm ->

  $ ssh-add --pkcs11-ask-pin `which openssh-kde-dialogs.sh`

  $ ssh-add --pkcs11-add-provider --pkcs11-provider 
/usr/lib/pkcs11/MyProvider.so

  $ ssh-add --pkcs11-add-id --pkcs11-slot-type label 
--pkcs11-slot "MyToken" --pkcs11-id-type subject --pkcs11-id 
"/C=XX/CN=YY"

  $ ssh myhost

In order to see available objects, you can use:

  $ ssh-add --pkcs11-show-slots --pkcs11-provider 
/usr/lib/pkcs11/MyProvider.so

  $ ssh-add --pkcs11-show-objects --pkcs11-provider 
/usr/lib/pkcs11/MyProvider.so --pkcs11-slot 0

I will be happy to receive any more comments!

Best Regards,
Alon Bar-Lev.


More information about the openssh-unix-dev mailing list