因此,有时当我通过putty连接到Linux服务器进行C语言编程时,在执行我的C文件进行测试后,命令行将重复填写单词"PuTTY"30到40次.有时它会在我的程序中多次显示该单词.
其他人有类似的问题吗?我也在做文件I/O,如果它与它有任何关系.
目标:检索给定证书的证书吊销列表信息.
原因:当一个java.security.cert.PKIXParameters对象设置为允许通过PKIXParameters#setRevocationEnabled(true);它检查证书撤销状态时,使用一个实例.sun.security.provider.certpath.CrlRevocationChecker
该检查器需要一个调用,PKIXParameters#addCertStore(...)其中添加一个java.security.cert.CertStore包含一个实现的实现,X509CRL该实现包含验证器可以检查的CRL信息.
问题:是否存在用于检索此数据的库或实现?还是必须手动完成?(下面的手册示例).库很可能支持可能出现的所有可能类型的连接/异常/错误,而手动解决方案需要工作以达到企业标准.
证书可以在任何这些x509证书包装器中
java.security.cert.X509Certificate
org.bouncycastle.cert.X509CertificateHolder
org.bouncycastle.jce.provider.X509CertificateObject
Run Code Online (Sandbox Code Playgroud)
用于手动检索CRL数据的Java代码
static List<X509CRLObject> getCRLSFromCertPath(CertPath certPath, CertificateFactory certificateFactory) {
List<X509CRLObject> x509CRLs = Lists.newArrayList();
List<? extends Certificate> certificates = certPath.getCertificates();
for (Certificate certificate : certificates) {
try {
X509CertImpl x509Cert = new X509CertImpl(certificate.getEncoded());
CRLDistributionPointsExtension crlDistroExten = x509Cert.getCRLDistributionPointsExtension();
if (crlDistroExten != null) {
ArrayList<DistributionPoint> distros = (ArrayList<DistributionPoint>) crlDistroExten.get(CRLDistributionPointsExtension.POINTS);
for (DistributionPoint distributionPoint : distros) {
GeneralNames distroName = distributionPoint.getFullName();
for (int i …Run Code Online (Sandbox Code Playgroud) 前提:我有一个证书,并且我想验证系统是否 “信任”该证书(由Java /操作系统由受信任的根CA签名)
我发现了一些有关如何实现此目的的不同解决方案。
选项1:
使用SSL类派生信任。
TrustManagerFactory tmfactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmfactory.init((KeyStore) null);
for (TrustManager trustManager : tmfactory.getTrustManagers()) {
if (trustManager instanceof X509TrustManager) {
try {
((X509TrustManager) trustManager).checkClientTrusted(new X509Certificate[] {new JcaX509CertificateConverter().getCertificate(holder)}, "RSA");
System.out.println("This certificate is trusted by a Root CA");
} catch (CertificateException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
由于此方法严重依赖SSL类(当前项目不需要),因此我们正在寻找替代方法。
选项2:将Java的cacerts文件加载到密钥库中,并对照我的证书检查每个“最受信任”的证书是否相等。
String filename = System.getProperty("java.home") + "/lib/security/cacerts".replace('/', File.separatorChar);
FileInputStream is = new FileInputStream(filename);
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
String password = "changeit";
keystore.load(is, password.toCharArray());
// This class retrieves the …Run Code Online (Sandbox Code Playgroud)