作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想为我的单元测试生成 x509 证书和 key 对。
private Pair<String, String> generateTokenAndCertificate() {
try {
//Configure generator
CertAndKeyGen certGen = new CertAndKeyGen("RSA", "SHA256WithRSA");
certGen.generate(2048);
long validSecs = (long) 365 * 24 * 60 * 60; // valid for one year
//Token
CharSequence content = "test";
Signer signer = new RsaSigner((RSAPrivateKey) certGen.getPrivateKey());
String token = JwtHelper.encode(content, signer).getEncoded();
//Certificate
X500Name data = new X500Name("CN=Test Application,O=Company,L=City,C=DE");
X509Certificate cert = certGen.getSelfCertificate(data, validSecs);
Base64 encoder = new Base64();
String certificate = X509Factory.BEGIN_CERT + "\n";
certificate += encoder.encode(cert.getEncoded());
certificate += X509Factory.END_CERT + "\n";
return new Pair<>(token, certificate);
} catch (Exception e) {
return null;
}
}
问题是我用过
import sun.security.provider.X509Factory;
import sun.security.tools.keytool.CertAndKeyGen;
import sun.security.x509.X500Name;
出现如下错误:
error: package sun.security.tools.keytool does not exist
和:
error: cannot find symbol
CertAndKeyGen certGen = new CertAndKeyGen("RSA", "SHA256WithRSA");
^
symbol: class CertAndKeyGen
location: class CertificationProviderSpecification
我知道 javac
不会加载关于 ct.sym
的完整 rt.jar
,我可以通过 解决此类错误-XDignore.symbol.file
或充气城堡。
但是否可以通过 java.security
或 org.springframework.security
生成这些?
最佳答案
您可以仅使用 java.security
创建 key 对:
KeyPairGenerator gen = KeyPairGenerator.getInstance("RSA");
gen.initialize(2048, SecureRandom.getInstance("SHA1PRNG"));
KeyPair keyPair = gen.generateKeyPair();
但是要创建证书,您必须使用 sun.security
类。
我从未使用过 org.springframework.security
但创建证书的一个很好的替代方法是 Bouncy Castle API - 检查 org.bouncycaSTLe.cert.jcajce.JcaX509v3CertificateBuilder
类,有 lots of online examples .
关于java - 如何在没有 sun.security 的情况下使用 key 对创建 X509Certificate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45016240/
我是一名优秀的程序员,十分优秀!