我正在用java制作一个桌面应用程序,并使用YubiKey来验证需要用户确认的请求。 我的 YubiKey 是 YubiKey 5C NFC。
在我的项目中,我使用库:“com.yubico.yubikit.core: 2.4.0”和“com.yubico.yubikit.piv: 2.4.0”。
在图书馆, 有一种生成密钥对的方法,如下所示:
public PublicKeyValues generateKeyValues(Slot slot, KeyType keyType, PinPolicy pinPolicy, TouchPolicy touchPolicy){}
这是插槽的枚举:
public enum Slot {
AUTHENTICATION(154, 6275333),
SIGNATURE(156, 6275338),
KEY_MANAGEMENT(157, 6275339),
CARD_AUTH(158, 6275329),
RETIRED1(130, 6275341),
RETIRED2(131, 6275342),
...
RETIRED20(149, 6275360),
ATTESTATION(249, 6291201);
}
这是 PinPolicy 的枚举:
public enum PinPolicy {
DEFAULT(0),
NEVER(1),
ONCE(2),
ALWAYS(3);
}
这是 TouchPolicy 的枚举:
public enum TouchPolicy {
DEFAULT(0),
NEVER(1),
ALWAYS(2),
CACHED(3);
}
我设置了
KeyType keyType = KeyType.RSA2048;
在我的代码中,我这样调用:
PublicKeyValues PublicKeyValues = pivSession.generateKeyValues(slot, keyType, pinPolicy, touchPolicy);
我还可以输入我的 PIN 码并检查我的代码是否与 YubiKey 连接。运行时它无法生成密钥对并出现错误:
Caused by: com.yubico.yubikit.core.smartcard.ApduException: APDU error: 0x6982
这意味着“安全状态不满足”。但我可以输入我的 PIN,验证正确并检查我的代码是否与我的 YubiKey 连接。
我尝试设置所有类型的
PinPolicy
和 TouchPolicy
但仍然是同样的错误。
已调试,并已上线:
byte[] response = this.protocol.sendAndReceive(new Apdu(0, 71, 0, slot.value, (new Tlv(-84, Tlvs.encodeMap(tlvs))).getBytes()));
位于“generateKeyValue”方法内部
同样的问题!我也需要帮助解决问题。该死!!!!