I got past the "pkcs11provider" issue - had to add a p11-kit module file for
the PKCS11 Provider library.
Now I seem it have an issue with the "libssh" library. The simple code I'm
testing with works on Linux (Fedora 37) but does not on Windows (10).
P11-kit recognizes the PKCS#11 library on both systems.
Same 0.10.0 library versions on both.
Is there a difference between the two versions of the library (Linux vs.
Windows)?
I'm using the following URI
"pkcs11:token=CryptoServer%20Token0;object=SSH-key"
On Linux:
[2022/12/22 17:35:24.218615, 3] ssh_userauth_publickey_auto: Trying to
authenticate with pkcs11:token=CryptoServer%20Token0;object=SSH-key
[2022/12/22 17:35:24.218625, 2] ssh_userauth_publickey_auto: Authenticating
with PKCS #11 URI.
[2022/12/22 17:35:24.219052, 2] pki_get_engine: Engine loaded successfully
[2022/12/22 17:35:24.219102, 2] pki_get_engine: Engine init success
[2022/12/22 17:35:24.299894, 3] ssh_key_algorithm_allowed: Checking
rsa-sha2-512 with list
<ecdsa-sha2-nistp256,[email protected],ecdsa-sha2-nistp384,[email protected],ecdsa-sha2-nistp521,[email protected],ssh-ed25519,[email protected],rsa-sha2-256,[email protected],rsa-sha2-512,[email protected]>
[2022/12/22 17:35:24.299934, 3] ssh_key_algorithm_allowed: Checking
rsa-sha2-512 with list
<ecdsa-sha2-nistp256,[email protected],ecdsa-sha2-nistp384,[email protected],ecdsa-sha2-nistp521,[email protected],ssh-ed25519,[email protected],rsa-sha2-256,[email protected],rsa-sha2-512,[email protected]>
[2022/12/22 17:35:24.300026, 3] ssh_socket_unbuffered_write: Enabling POLLOUT
for socket
[2022/12/22 17:35:24.300080, 3] packet_send2: packet: wrote [type=50, len=368,
padding_size=11, comp=356, payload=356]
[2022/12/22 17:35:24.300094, 4] ssh_socket_pollcallback: Poll callback on
socket 3 (POLLOUT ), out buffer 0
[2022/12/22 17:35:24.300127, 4] ssh_socket_pollcallback: sending control flow
event
[2022/12/22 17:35:24.300147, 4] ssh_packet_socket_controlflow_callback:
sending channel_write_wontblock callback
[2022/12/22 17:35:24.339500, 4] ssh_socket_pollcallback: Poll callback on
socket 3 (POLLIN ), out buffer 0
[2022/12/22 17:35:24.339585, 3] ssh_packet_socket_callback: packet: read type
60 [len=320,padding=19,comp=300,payload=300]
[2022/12/22 17:35:24.339606, 3] ssh_packet_process: Dispatching handler for
packet type 60
[2022/12/22 17:35:24.339622, 4] ssh_packet_userauth_pk_ok: Received
SSH_USERAUTH_PK_OK/INFO_REQUEST/GSSAPI_RESPONSE
[2022/12/22 17:35:24.339637, 4] ssh_packet_userauth_pk_ok: Assuming
SSH_USERAUTH_PK_OK
Enter PKCS#11 token PIN for CryptoServer Token0:
[2022/12/22 17:35:29.875664, 3] ssh_key_algorithm_allowed: Checking
rsa-sha2-512 with list
<ecdsa-sha2-nistp256,[email protected],ecdsa-sha2-nistp384,[email protected],ecdsa-sha2-nistp521,[email protected],ssh-ed25519,[email protected],rsa-sha2-256,[email protected],rsa-sha2-512,[email protected]>
[2022/12/22 17:35:29.875699, 3] ssh_key_algorithm_allowed: Checking
rsa-sha2-512 with list
<ecdsa-sha2-nistp256,[email protected],ecdsa-sha2-nistp384,[email protected],ecdsa-sha2-nistp521,[email protected],ssh-ed25519,[email protected],rsa-sha2-256,[email protected],rsa-sha2-512,[email protected]>
[2022/12/22 17:35:29.875720, 3] ssh_key_algorithm_allowed: Checking
rsa-sha2-512 with list
<ecdsa-sha2-nistp256,[email protected],ecdsa-sha2-nistp384,[email protected],ecdsa-sha2-nistp521,[email protected],ssh-ed25519,[email protected],rsa-sha2-256,[email protected],rsa-sha2-512,[email protected]>
[2022/12/22 17:35:29.882090, 3] ssh_socket_unbuffered_write: Enabling POLLOUT
for socket
[2022/12/22 17:35:29.882117, 3] packet_send2: packet: wrote [type=50, len=656,
padding_size=19, comp=636, payload=636]
[2022/12/22 17:35:29.882127, 4] ssh_socket_pollcallback: Poll callback on
socket 3 (POLLOUT ), out buffer 0
[2022/12/22 17:35:29.882133, 4] ssh_socket_pollcallback: sending control flow
event
[2022/12/22 17:35:29.882139, 4] ssh_packet_socket_controlflow_callback:
sending channel_write_wontblock callback
[2022/12/22 17:35:29.937821, 4] ssh_socket_pollcallback: Poll callback on
socket 3 (POLLIN ), out buffer 0
[2022/12/22 17:35:29.937878, 3] ssh_packet_socket_callback: packet: read type
52 [len=16,padding=14,comp=1,payload=1]
[2022/12/22 17:35:29.937886, 3] ssh_packet_process: Dispatching handler for
packet type 52
[2022/12/22 17:35:29.937892, 3] ssh_packet_userauth_success: Authentication
successful
[2022/12/22 17:35:29.937898, 4] ssh_packet_userauth_success: Received
SSH_USERAUTH_SUCCESS
[2022/12/22 17:35:29.937904, 3] ssh_packet_need_rekey: rekey:
[data_rekey_needed=0, out_blocks=92, in_blocks=34]
[2022/12/22 17:35:29.937912, 2] ssh_userauth_publickey_auto: Successfully
authenticated using pkcs11:token=CryptoServer%20Token0;object=SSH-key
[2022/12/22 17:35:29.937924, 2] channel_open: Creating a channel 43 with 64000
window and 32768 max packet
On Windows 10:
[2022/12/22 17:49:00.492712, 3] ssh_userauth_publickey_auto: Trying to
authenticate with pkcs11:token=CryptoServer%20Token0;object=SSH-key
[2022/12/22 17:49:00.507613, 2] ssh_userauth_publickey_auto: Authenticating
with PKCS #11 URI.
[2022/12/22 17:49:00.539737, 1] ssh_pki_import_pubkey_file: Error opening
pkcs11:token=CryptoServer%20Token0;object=SSH-key: Invalid argument
[2022/12/22 17:49:00.554692, 1] ssh_pki_import_privkey_file: Error opening
pkcs11:token=CryptoServer%20Token0;object=SSH-key: Invalid argument
[2022/12/22 17:49:00.585873, 3] ssh_userauth_publickey_auto: Private key
pkcs11:token=CryptoServer%20Token0;object=SSH-key doesn't exist.
[2022/12/22 17:49:00.601394, 3] ssh_userauth_publickey_auto: Trying to
authenticate with C:\Users\Dennis/.ssh/id_ed25519
[2022/12/22 17:49:00.632921, 1] ssh_pki_import_pubkey_file: Error opening
C:\Users\Dennis/.ssh/id_ed25519.pub: No such file or directory
[2022/12/22 17:49:00.648312, 1] ssh_pki_import_privkey_file: Error opening
C:\Users\Dennis/.ssh/id_ed25519: No such file or directory
[2022/12/22 17:49:00.679591, 3] ssh_userauth_publickey_auto: Private key
C:\Users\Dennis/.ssh/id_ed25519 doesn't exist.
[2022/12/22 17:49:00.695713, 3] ssh_userauth_publickey_auto: Trying to
authenticate with C:\Users\Dennis/.ssh/id_ecdsa
[2022/12/22 17:49:00.726494, 1] ssh_pki_import_pubkey_file: Error opening
C:\Users\Dennis/.ssh/id_ecdsa.pub: No such file or directory
[2022/12/22 17:49:00.757865, 1] ssh_pki_import_privkey_file: Error opening
C:\Users\Dennis/.ssh/id_ecdsa: No such file or directory
[2022/12/22 17:49:00.773702, 3] ssh_userauth_publickey_auto: Private key
C:\Users\Dennis/.ssh/id_ecdsa doesn't exist.
[2022/12/22 17:49:00.805660, 3] ssh_userauth_publickey_auto: Trying to
authenticate with C:\Users\Dennis/.ssh/id_rsa
[2022/12/22 17:49:00.836304, 1] ssh_pki_import_pubkey_file: Error opening
C:\Users\Dennis/.ssh/id_rsa.pub: No such file or directory
[2022/12/22 17:49:00.851924, 1] ssh_pki_import_privkey_file: Error opening
C:\Users\Dennis/.ssh/id_rsa: No such file or directory
[2022/12/22 17:49:00.883218, 3] ssh_userauth_publickey_auto: Private key
C:\Users\Dennis/.ssh/id_rsa doesn't exist.
[2022/12/22 17:49:00.914533, 2] ssh_userauth_publickey_auto: Tried every
public key, none matched
User Authentication failed:
[2022/12/22 17:49:00.929338, 3] packet_send2: packet: wrote [type=1, len=32,
padding_size=11, comp=20, payload=20]
Error allocating SFTP session
-----Original Message-----
From: Jakub Jelen <[email protected]>
Sent: Wednesday, December 7, 2022 4:21 AM
To: [email protected]
Subject: Re: Hardware device
On 12/5/22 14:38, Dennis Gnatowski wrote:
> I am following the example from
> ( <https://developers.redhat.com/blog/2020/10/28/smart-cards-support-in->
> https://developers.redhat.com/blog/2020/10/28/smart-cards-support-in-
> libssh#build_and_use_libssh_with_pkcs__11
> <https://developers.redhat.com/blog/2020/10/28/smart-cards-support-in-
> libssh#build_and_use_libssh_with_pkcs__11>)
>
> int rc;
>
> char priv_uri[1042] =
> “pkcs11:token=my-token;object=my-object;type=private?pin-value=1234”;
>
> rc = ssh_options_set(session, SSH_OPTIONS_IDENTITY, priv_uri);
>
> assert_int_equal(rc, SSH_OK)
>
> rc = ssh_userauth_publickey_auto(session, NULL, NULL);
>
> but using:
>
> char priv_uri[1042] =
> "pkcs11:object=SSH-key-acme?pin-value=####;manufacturer=IBM?module-pat
> h=/usr/lib64/pkcs11/PKCS11_API.so";
This does not look like a valid URI. There can be only one question mark, path
is separated by semicolons and query parts are separated by ampersands so it
should be something like:
pkcs11:object=SSH-key-acme;manufacturer=IBM?pin-value=####&module-path=/usr/lib64/pkcs11/PKCS11_API.so
see the uri syntax in <https://datatracker.ietf.org/doc/html/rfc7512>
https://datatracker.ietf.org/doc/html/rfc7512
Regards,
--
Jakub Jelen
Crypto Team, Security Engineering
Red Hat, Inc.