我正在研究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"; …Run Code Online (Sandbox Code Playgroud) 如何使用系统authorized_keys文件中的条目进行java.security.PublicKey实现?我特别想要将authorized_keys文件中的公钥与Apache SSHD PublickeyAuthenticator界面中提供的公钥进行比较.
几个月前我启动了一个EC2实例,当时我将.pem密钥存储在我的电脑中.PC崩溃了,我不得不重新安装Windows,我没有.pem文件的备份
有什么方法可以让我在EC2实例上获得提示 - 任何方式ssh或以其他方式获取实例?
我需要使用java读取公钥并对其进行解析,以检查其有效性,指数,模数或是否有效.我尝试了以下代码,并遇到了问题.能帮我找到解决这个问题的方法吗?
public static void getPublicKey(String key) throws Exception {
key = key.replaceAll("-----BEGIN SSH2 PUBLIC KEY-----", "");
key = key.replaceAll("-----END SSH2 PUBLIC KEY-----", "");
KeyFactory kFactory = KeyFactory.getInstance("RSA", new BouncyCastleProvider());
byte pub_llave[] = new BASE64Decoder().decodeBuffer( key ) ;
X509EncodedKeySpec spec = new X509EncodedKeySpec(pub_llave);
PublicKey pubkey = (PublicKey) kFactory.generatePublic(spec);
}
Run Code Online (Sandbox Code Playgroud)
以下是例外情况:
java.lang.IllegalArgumentException: unknown object in getInstance: org.bouncycastle.asn1.DERApplicationSpecific
at org.bouncycastle.asn1.ASN1Sequence.getInstance(Unknown Source)
at org.bouncycastle.asn1.ASN1Sequence.getInstance(Unknown Source)
at org.bouncycastle.asn1.x509.SubjectPublicKeyInfo.getInstance(Unknown Source)
Run Code Online (Sandbox Code Playgroud) 我想获取.pub文件内容的公钥.这是一个.pub文件内容(生成ssh-keygen)的示例:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBPL2s+25Ank3zS6iHUoVk0tS63dZM0LzAaniiDon0tdWwq4vcL4+fV8BsAEcpMeijS92JhDDc9FccXlHbdDcmd6c4ITOt9h9xxhIefGsi1FTVJ/EjVtbqF5m0bu7ruIMGvuP1p5s004roHx9y0UdHvD/yNWLISMhy4nio6jLailIj3FS53Emj1WRNsOrpja3LzPXzhuuj6YnD9yfByT7iGZipxkmleaXrknChPClLI9uhcqtAzBLdd0NVTJLOt/3+d1cSNwdBw9e53wJvpEmH+P8UOZd+oV/y7cHIej4jQpBXVvpJR1Yaluh5RuxY90B0hSescUAj4g/3HVPpR/gE7op6i9Ab//0iXF15uWGlGzipI4lA2/wYEtv8swTjmdCTMNcTDw/1huTDEzZjghIKVpskHde/Lj416c7eSByLqsMg2OhlZGChKznpIjhuNRXz93DwqKuIKvJKSnhqaJDxmDGfG7nlQ/eTwGeAZ6VR50yMPiRTIpuYd767+Nsg486z7p0pnKoBlL6ffTbfeolUX2b6Nb9ZIOxJdpCSNTQRKQ50p4Y3S580cUM1Y2EfjlfIQG1JdmTQYB75AZXi/cB2PvScmF0bXRoj7iHg4lCnSUvRprWA0xbwzCW/wjNqw6MyRX42FFlvSRrmfaxGZxKYbmk3TzBv+Fp+CADPqQm3OQ== test@test.com
Run Code Online (Sandbox Code Playgroud)
如果我是对的,这不是公钥,但可以从此字符串中获取公钥.
这个答案给出了我的问题
的答案/sf/answers/1357126221/
但答案似乎不起作用.我得到一个例外:
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: invalid key format
Run Code Online (Sandbox Code Playgroud)
在查看答案的评论时,我不是唯一有问题的人...
我该如何修复异常?或者是否有另一种方法从字符串中获取公钥?
有没有办法以编程方式将Jsch生成的 SSH RSA 密钥转换为可用于加密的javax.crypto.Cipher格式?我大多看到过类似的答案:
openssl pkcs8 -topk8 -inform PEM -outform DER -in private_key_file -nocrypt > pkcs8_key
Run Code Online (Sandbox Code Playgroud)
但我无法访问 openSSL 或 shell 命令。顺便说一句:我只使用 JDK6。
BigInteger感谢 @erickson 的帮助,我可以使用指数和模数作为传递给 a 的类型,KeyFactory将公钥从 RFC4716 转换为 Java 公钥RSAPublicKeySpec。他的解决方案如下。
现在我正在尝试转换私钥。privateJsch.key这是使用生成的示例writePrivateKey(str filename):
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQC0ouLgTjmKjHU6UjNSL8HyTIdFM1UdVpgU81paWKreN8L36YoT
goZQHeyyUCCHmq3r3cKaySyu93mHBY0l76qSAIRZgE1IAFkBhNWBdlJ9UYA9HXm/
MqTQHbpqz0EYGE9TsFHS8dn1/utsJxKSWZ4xPNYjfS4Ps6G84iRwfdrIbQIDAQAB
AoGAKv3xnY1AqLcRV5Yk3NS9Blwsfc3f3iG0BJh+0q3zzPvcjYCp+kbAjOTyZuYn
N98asd6P6KMk3WfNJtOtanAGWl46bmtzNsQtSr5rVQEgs2w8i2yJcwVAYf2Td4qX
m3dH+roJA/CEFRSDat4sUfjOVmsYQXIBa0W2XTpp+7T1U4ECQQD1wSR6iTz7Bja0
MPcizDbRTRQHALBf7E8j8YOLpN/IGSox9pT+ktjsI2vMaD+b3SM4s0FD8quBlppE
o5FAguHxAkEAvCrCK7eZU3H+Ul1iw9Kd3WPHjDvQcdT5rEL+NSYEZyHgU7ipXEih
UHvK47Bkte/PVIu3jBFBnMujA0XiT0gSPQJBAI3+8j/nChgU6AjHfhRaIJZgzeCZ
8k8KcFPZWWOXeUHZ4HqL+lz5pmMSuFecKJy7cn1xfZVwIs62oR5l0CiRN1ECQCui
CqaSi3ZjH6M/znA0PbEhuxsUn7BVv5OncUUnzKuRmnAviO5CVU3Rdum3dJMPydcE
Ewri0YEnY2SV5vWVc80CQH43uBbshz7ju3DdVykHFrRElQB+f0YMK3Ad7eu+us0w
dLrOOoXP0T60B/bMTo8rdMa6XU/0w/w8FsOqoxNY23U=
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
使用openssl asn1parse -in privateJsch.key -out privateJsch.der产量:
$ openssl asn1parse …Run Code Online (Sandbox Code Playgroud) java ×5
rsa ×3
encryption ×2
security ×2
ssh ×2
amazon-ec2 ×1
bouncycastle ×1
openssh ×1
saml ×1