【发布时间】:2015-12-04 20:40:10
【问题描述】:
初次使用 jose4j。我找到了这样的例子来从证书设置私钥:
JsonWebSignature jws = new JsonWebSignature();
PKCS8EncodedKeySpec spec =
new PKCS8EncodedKeySpec(keyBytes);
KeyFactory kf = KeyFactory.getInstance("RSA");
PrivateKey pk = kf.generatePrivate(spec);
jws.setKey(kf.generatePrivate(spec));
但我收到此错误消息
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: invalid key format
我认为这是因为证书是作为 SHA256 而不是 RSA 创建的。这是我被告知创建证书的方式:
openssl req -x509 -sha256 -nodes -days 730 -newkey rsa:2048 -keyout private.key -out certificate_pub.crt
有没有人可以举例说明如何使用 SHA256 证书签署 JWT?
【问题讨论】:
-
证书 使用 SHA256 和 RSA 进行签名,但您用于签名的 私钥 确实如此不使用任何散列,只是 RSA。 (如果它被加密,PBE 将包含一些散列,但这是不可选的。)对于最近的版本(1.0.0 及更高版本)大多数
openssl命令行操作,包括这个,在 PKCS 中写入私钥PEM 中的#8 格式。文件的第一行可读字符是-----BEGIN PRIVATE KEY-----吗?您(或任何人)是否使用 1.0.0+ 并且在将 PEM 放入PKCS8EncodedKeySpec之前是否将 PEM 转换为二进制? -
证书文件是可读的,并且以 -----BEGIN RSA PRIVATE KEY-----.... 我也尝试从文件并运行,但它没有帮助。下面是我用来读取私钥文件的代码:String filename = "C:\\private.key";文件 f = 新文件(文件名); FileInputStream fis = new FileInputStream(f); DataInputStream dis = new DataInputStream(fis); byte[] keyBytes = new byte[(int)f.length()]; dis.readFully(keyBytes);
标签: certificate jwt private-key sha