首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >X500Name到java.security.Principal

X500Name到java.security.Principal
EN

Stack Overflow用户
提问于 2014-04-29 18:57:30
回答 2查看 9.4K关注 0票数 3

我正在尝试查找实现java.security.principal的类,以便为证书提供主题DN值。在搜索的过程中,我偶然发现X500Name是一个通常用于提供主题的类。但是,这并没有实现Principal接口。让我惊讶的是,与X500Name不同的是,X500Name的降价类X509Principal实现了这个接口。使用什么类?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-29 20:05:05

我推荐使用实现java.security.Principal的bouncy castle类:org.bouncycastle.jce.X509Principal。为了获取org.bouncycastle.jce.X509Principal实例,您可以使用以下方法:

代码语言:javascript
复制
public static org.bouncycastle.jce.X509Principal getSubjectX509Principal(
    java.security.cert.X509Certificate cert) throws CertificateEncodingException

org.bouncycastle.jce.PrincipalUtil的。

我给你一个例子:

代码语言:javascript
复制
import java.io.FileInputStream;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;

public class X509PrincipalSample {

    public static void main(String[] args) throws Exception {

            CertificateFactory cf = CertificateFactory.getInstance("X509");
            // certificate file must be encoded in DER binary format
            FileInputStream certificateFile = new FileInputStream("/tmp/cer.cer");
            X509Certificate certificate = (X509Certificate) cf.generateCertificate(certificateFile);
            X509Principal x509Principal = PrincipalUtil.getSubjectX509Principal(certificate);
            System.out.println(x509Principal.getName());
    }
}

希望这能帮上忙

编辑:

正如你所说,org.bouncycastle.jce.X509Principal在上一个弹跳城堡版本中被弃用了。因此您可以使用org.bouncycastle.asn1.x500.X500Name来处理subjectDN字段,但是,如果您希望使用一个通过javax.security.auth.x500.X500Principal实现java.security.Principal类,我给您提供另一个示例:

代码语言:javascript
复制
import java.io.FileInputStream;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;

import javax.security.auth.x500.X500Principal;

import org.bouncycastle.asn1.x500.RDN;
import org.bouncycastle.asn1.x500.X500Name;
import org.bouncycastle.asn1.x500.style.BCStyle;
import org.bouncycastle.asn1.x500.style.IETFUtils;


public class X500NameSample {

    public static void main(String[] args) throws Exception {

         CertificateFactory cf = CertificateFactory.getInstance("X509");
         // certificate file must be encoded in DER binary format
         FileInputStream certificateFile = new FileInputStream("C:/Documents and Settings/aciffone/Escritorio/cer.cer");
         X509Certificate certificate = (X509Certificate) cf.generateCertificate(certificateFile);

         // using X500Principal
         X500Principal subjectX500Principal = certificate.getSubjectX500Principal();
         System.out.println(subjectX500Principal.getName());
         System.out.println(subjectX500Principal.getName(X500Principal.RFC1779));
         System.out.println(subjectX500Principal.getName(X500Principal.CANONICAL));

         // using X500Name
         X500Name x500name = new X500Name( subjectX500Principal.getName(X500Principal.RFC1779) );
         // you can get the different subject DN values with BCStyle constants
         RDN cn = x500name.getRDNs(BCStyle.CN)[0];
         System.out.println(IETFUtils.valueToString(cn.getFirst().getValue()));

         x500name = new X500Name( subjectX500Principal.getName() );
         // you can get the different subject DN values with BCStyle constants
         cn = x500name.getRDNs(BCStyle.CN)[0];
         System.out.println(IETFUtils.valueToString(cn.getFirst().getValue()));
    }
}
票数 7
EN

Stack Overflow用户

发布于 2014-04-30 16:05:39

错误,javax.security.auth.X500Principal

所有实现的接口:

代码语言:javascript
复制
    Serializable, Principal 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23362698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档