2

Javaでは、SSL証明書から「発行先」またはユーザーをどのように抽出しますHttpRequestか?

私が取り組んでいるもの:

 Object certChain = request
    .getAttribute("javax.servlet.request.X509Certificate");
if (certChain != null)
{
  X509Certificate certs[] = (X509Certificate[]) certChain;
  X509Certificate cert = certs[0];
  String user = cert.getSubjectDN().getName();
}
4

2 に答える 2

3

これは、httprequest内の証明書の「IssuedTo」(別名Subject)を抽出するためのコードです。

import java.security.cert.X509Certificate;
import javax.naming.InvalidNameException;
import javax.naming.ldap.LdapName;
import javax.naming.ldap.Rdn;

X509Certificate[] certs = (X509Certificate[])request.getAttribute("javax.servlet.request.X509Certificate");
if ((certs == null) || (certs.length == 0)) {
   return null;
}

String name = certs[0].getSubjectX500Principal().getName(); // if you are looking for issuer then use cert[0].getIssuerX500Principal().getName();
LdapName ldapName = null;
try {
   ldapName = new LdapName(name);
} catch (InvalidNameException e) {
   throw new RuntimeException(e);
}

for (Rdn rdn : ldapName.getRdns()) {
   String type = rdn.getType();
   if ("CN".equals(type)) { 
        String issuedTo = (String)rdn.getValue();
   }
}

JDK6のrt.jarにはAPIgetSubjectX500Prinicpal()がローカルにありますが、以前のバージョンについてはわかりません。 ここに画像の説明を入力してください

于 2012-11-02T18:08:36.207 に答える
2

getSubjectDN()もう使用しないでください。

否定され、getSubjectX500Principal()に置き換えられました。

したがって、以下を使用します。

cert[0].getSubjectX500Principal().getName();

これがJavaDocforですgetSubjectX500Principal()

于 2012-11-02T17:49:32.763 に答える