0
这里是我的代码:无法提取X509公钥证书
import java.security.PublicKey;
import java.security.spec.InvalidKeySpecException;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.X509EncodedKeySpec;
import java.security.KeyFactory;
class LoadKey {
public static void main(String[] args)
throws InvalidKeySpecException, UnsupportedEncodingException, NoSuchAlgorithmException
{
String cert = "-----BEGIN CERTIFICATE-----\n" +
"MIIDITCCAoqgAwIBAgIQT52W2WawmStUwpV8tBV9TTANBgkqhkiG9w0BAQUFADBM\n" +
"MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg\n" +
"THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0xMTEwMjYwMDAwMDBaFw0x\n" +
"MzA5MzAyMzU5NTlaMGgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlh\n" +
"MRYwFAYDVQQHFA1Nb3VudGFpbiBWaWV3MRMwEQYDVQQKFApHb29nbGUgSW5jMRcw\n" +
"FQYDVQQDFA53d3cuZ29vZ2xlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC\n" +
"gYEA3rcmQ6aZhc04pxUJuc8PycNVjIjujI0oJyRLKl6g2Bb6YRhLz21ggNM1QDJy\n" +
"wI8S2OVOj7my9tkVXlqGMaO6hqpryNlxjMzNJxMenUJdOPanrO/6YvMYgdQkRn8B\n" +
"d3zGKokUmbuYOR2oGfs5AER9G5RqeC1prcB6LPrQ2iASmNMCAwEAAaOB5zCB5DAM\n" +
"BgNVHRMBAf8EAjAAMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwudGhhd3Rl\n" +
"LmNvbS9UaGF3dGVTR0NDQS5jcmwwKAYDVR0lBCEwHwYIKwYBBQUHAwEGCCsGAQUF\n" +
"BwMCBglghkgBhvhCBAEwcgYIKwYBBQUHAQEEZjBkMCIGCCsGAQUFBzABhhZodHRw\n" +
"Oi8vb2NzcC50aGF3dGUuY29tMD4GCCsGAQUFBzAChjJodHRwOi8vd3d3LnRoYXd0\n" +
"ZS5jb20vcmVwb3NpdG9yeS9UaGF3dGVfU0dDX0NBLmNydDANBgkqhkiG9w0BAQUF\n" +
"AAOBgQAhrNWuyjSJWsKrUtKyNGadeqvu5nzVfsJcKLt0AMkQH0IT/GmKHiSgAgDp\n" +
"ulvKGQSy068Bsn5fFNum21K5mvMSf3yinDtvmX3qUA12IxL/92ZzKbeVCq3Yi7Le\n" +
"IOkKcGQRCMha8X2e7GmlpdWC1ycenlbN0nbVeSv3JUMcafC4+Q==\n" +
"-----END CERTIFICATE-----\n";
System.out.println(cert);
byte[] encodedCert = cert.getBytes();
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(encodedCert);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(keySpec);
}
}
OpenSSL是能够通过命令行来解码X509证书,所以我知道这是一个有效的证书。但Java似乎并不喜欢它,完全一样。
我已经厌倦了它,没有拖尾\ n无济于事。
任何想法?
你有证书为PEM文本,你在你的电脑的默认字符集是字符串的字节,通过这些字节有没有关系加密东西到*关键*相关的工厂,你到底会发生什么? –
也许它期待'\ r \ n'?你有没有试过先从文件中读取它? – Zymus
@OlegEstekhin - well'cert.getBytes(“UTF-8”)'也没有帮助。当你在我的文章中说过,OpenSSL('openssl x509 -in mycert.pem -noout -text')可以读取那些字节就好了,你怎么能说这些字节与加密的东西没有关系呢?如果这些字节与字节序列没有任何关系,如果Java决定抛弃所有的IETF RFC并且制定自己的标准,那么这是一种非常糟糕的无用语言。 – neubert