- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 bouncy-caSTLe
库与 Web-Server
进行 TLS-Handshake
并获取公共(public)证书。下面是我的代码
private org.bouncycastle.asn1.x509.Certificate[] certificateList;
public static void main(String... args) {
new BCMain().testBCTLS();
}
private void testBCTLS() {
try {
Socket s = new Socket(InetAddress.getByName(WEB_SERVER), WEB_SERVER_PORT);
//TlsProtocolHandler tlsHandler = new TlsProtocolHandler(s.getInputStream(), s.getOutputStream());
TlsClientProtocol protocol = new TlsClientProtocol(s.getInputStream(), s.getOutputStream(), new SecureRandom());
TlsClient client = new DefaultTlsClient() {
private Boolean connectionStatus = Boolean.FALSE;
@Override
public TlsAuthentication getAuthentication() throws IOException {
return new ServerOnlyTlsAuthentication() {
public void notifyServerCertificate(Certificate serverCertificate)
throws IOException {
certificateList = serverCertificate.getCertificateList();
}
};
}
@Override
public Hashtable getClientExtensions() throws IOException {
Hashtable clientExtensions = super.getClientExtensions();
clientExtensions = TlsExtensionsUtils.ensureExtensionsInitialised(clientExtensions);
Vector<ServerName> serverNames = new Vector(1);
serverNames.add(new ServerName(NameType.host_name, SNI_HOST_NAME));
TlsExtensionsUtils.addServerNameExtension(clientExtensions, new ServerNameList(serverNames));
return clientExtensions;
}
public Boolean getConnectionStatus() {
return connectionStatus;
}
};
protocol.connect(client);
if (this.certificateList!=null) {
org.bouncycastle.asn1.x509.Certificate certificate = certificateList[0];
System.out.println(certificate.getSubject());
}
InputStream is = protocol.getInputStream();
System.out.println(is);
} catch (Exception e) {
e.printStackTrace();
}
}
我想从该公共(public)证书中提取 Subject Alternative Names
X509Certificate JDK 有提取 SubjectAlternativeNames
的方法。但我想从 bouncy-caSTLe
证书中获得相同的内容。
有人可以帮忙吗?
最佳答案
我能够使用 X509CertificateHolder
和 JcaX509CertificateConverter
类从 BouncyCaSTLe
库中提取 Subject-Alternative-Names
。 .继续上面的代码
import org.bouncycastle.cert.X509CertificateHolder;
import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
if (this.certificateList!=null) {
org.bouncycastle.asn1.x509.Certificate certificate = certificateList[0];
X509CertificateHolder holder = new X509CertificateHolder(certificate.getEncoded());
X509Certificate x509Certificate = new JcaX509CertificateConverter().getCertificate(holder);
Collection<List<?>> sanCollections = x509Certificate.getSubjectAlternativeNames();
}
关于java - 使用 Bouncy-CaSTLe 库从证书中读取 SubjectAlternativeNames,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57367275/
我尝试解析 certificate 的额外数据在Java中。我对 subjectAlternativeNames 部分感兴趣。我的代码是: CertificateFactory certFactory
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在使用 bouncy-caSTLe 库与 Web-Server 进行 TLS-Handshake 并获取公共(public)证书。下面是我的代码 private org.bouncycastle
我正在从 Java 中的 X509 证书中提取 SubjectAlternativeName,它似乎返回类似的内容 [2, domain.example.com ] 这是标准吗?值中的 2 代表什么?
有一个非面向公众的应用程序。我正在尝试确保没有与 HTTPS 相关的警告/错误。 我在将证书与 SAN 字段(由受信任的 CA 签名)放在一起后收到的错误是 Web 应用程序根本不会加载,即专门 Go
我有一个基于用java编写的“commons-httpclient”(v3.*)的httpclient。客户端可以与至少两个不同的产品(服务器)正常工作。 但是与我希望它能够使用的新服务器(产品)的s
我是一名优秀的程序员,十分优秀!