如何从文件加载RSA私钥
我正在研究SAML 1.1断言消费者服务的测试工具。测试必须生成签名的SAMLResponse并将其提交给Base64中编码的ACS。ACS必须能够使用X509公共证书验证签名的消息。
我能够构建SAMLResponse,添加必要的断言等。但是当我尝试签署对象时,我遇到了问题。这是我当前代码的片段:
String certPath = "mycert.pem";File pubCertFile = new File(certPath);BufferedInputStream bis = null;try { bis = new BufferedInputStream(new FileInputStream(pubCertFile));} catch(FileNotFoundException e) { throw new Exception("Could not locate certfile at '" + certPath + "'", e);}CertificateFactory certFact = null;Certificate cert = null;try { certFact = CertificateFactory.getInstance("X.509"); cert = certFact.generateCertificate(bis);} catch(CertificateException e) { throw new Exception("Could not instantiate cert", e);}bis.close();ArrayList<Certificate> certs = new ArrayList<Certificate>();certs.add(cert);String keyPath = "mykey.pem";File privKeyFile = new File(keyPath);try { bis = new BufferedInputStream(new FileInputStream(privKeyFile));} catch(FileNotFoundException e) { throw new Exception("Could not locate keyfile at '" + keyPath + "'", e);}byte[] privKeyBytes = new byte[(int)privKeyFile.length()];bis.read(privKeyBytes);bis.close();KeyFactory keyFactory = KeyFactory.getInstance("RSA");KeySpec ks = new PKCS8EncodedKeySpec(privKeyBytes);RSAPrivateKey privKey = (RSAPrivateKey) keyFactory.generatePrivate(ks);samlResponse.sign(Signature.getInstance("SHA1withRSA").toString(), privKey, certs);
错误发生在倒数第二行。我在控制台中看到以下内容:
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: invalid key format
虽然不是习惯性的或安全的,但为了这个帖子,我提供了我正在使用的公共证书和私钥。一旦问题解决了,我当然会重新创建新的。:)
喵喵时光机
慕哥6287543
相关分类