Libyubihsm Backend
Libyubihsm has two builtin communication backends:
- HTTP Backend requires an HTTP connector to sit between the YubiHSM 2 and the USB connection on the host machine. Yubico provides the yubihsm-connector tool for this purpose, which can be run on the same machine as the YubiHSM 2 or on a different machine that has network access to the YubiHSM 2.
- USB Backend allows direct communication with the YubiHSM 2 over USB without the need for an HTTP connector.
Both backends can be used with the same libyubihsm API, and the choice of backend is determined by the URL scheme
used when initializing the connector. A default URL can be specified using the environment variable
DEFAULT_CONNECTOR_URL.
HTTP Backend
When an http:// or https:// URL is provided to libyubihsm, the library loads its HTTP backend and uses
libcurl to communicate with whatever is listening at that address. All commands and responses are exchanged as raw
binary data over standard HTTP POST requests; however, since all communication with the YubiHSM 2 occur within the
context of an encrypted session, all data going through the HTTP connection is already encrypted.
Yubico provides the YubiHSM 2 Connector to act as an HTTP connector for the YubiHSM 2. The connector listens for
HTTP requests on a specified port and forwards them to the YubiHSM 2 over USB, and then sends the responses back to the
client over HTTP. This allows applications using libyubihsm to communicate with the YubiHSM 2 over a network
connection, which can be useful in scenarios where the application and the YubiHSM 2 are not on the same machine.
USB Backend
With a direct USB connection, your application communicates with the YubiHSM 2 directly over USB, without the
connector service running at all. The USB backend is loaded directly by libyubihsm using the yhusb:// URL scheme.
Direct USB connection is suitable where the YubiHSM 2 is physically connected to the same machine as the application and there is no need for remote access.
How to Connect Using Direct USB
Use the yhusb:// URL scheme in place of the HTTP connector URL. For example:
$ yubihsm-shell --connector yhusb://
$ yubihsm-manager --connector yhusb://
To target a specific YubiHSM 2 device by its serial number use yhusb://serial=<SERIAL_NUMBER>. For example:
$ yubihsm-shell --connector yhusb://serial=12345678
When using libyubihsm directly in application code, pass the same URL to yh_init_connector(). For example:
yh_connector *connector;
yh_init_connector("yhusb://", &connector);
OS Permissions for USB Access
Regardless of which backend is used, the process accessing the YubiHSM 2 over USB must have permission to access the USB device on the host operating system. The recommended approach is to grant access to a dedicated group rather than running as root.
Linux — udev Rules
On Linux, USB device permissions are managed by udev. By default, raw USB device access is restricted to root. The
best practice is to create a dedicated group and a udev rule that grants that group access to the YubiHSM 2.
Step 1: Create a dedicated group:
$ groupadd yubihsm
$ usermod -aG yubihsm <your-username>
Step 2: Create a udev rule file at /etc/udev/rules.d/70-yubihsm.rules:
SUBSYSTEM=="usb", ATTR{idVendor}=="1050", ATTR{idProduct}=="0030", MODE="0660", GROUP="yubihsm"
The vendor ID 1050 and product ID 0030 identify the YubiHSM 2.
Step 3: Reload udev rules and re-plug the device:
$ udevadm control --reload-rules
$ udevadm trigger
Note
Best practice: Use MODE="0660" (group read/write, no world access). Avoid MODE="0666", which would grant all users on the system raw access to the device.
When using the HTTP Connector, only the user account running the connector needs to be in the yubihsm group. The
YubiHSM applications connect to the connector over HTTP and never touch the USB device directly.
MacOS
On macOS, USB HID-class devices are generally accessible to user-space applications without special configuration. If permission issues are encountered, ensure the process is running as a user with access to the USB subsystem.
Windows
On Windows, the YubiHSM 2 driver handles access control. When using the HTTP Connector, it is recommended to install
and run yubihsm-connector as a Windows Service under a dedicated low-privilege service account. The connector
installer handles the necessary driver configuration automatically.