- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试寻找实现 java.security.principal 的类来为证书提供主题 DN 值。在搜索时,我发现 X500Name 是通常用于提供主题的类。但是,这并没有实现 Principal 接口(interface)。令我惊讶的是,X500Name 的折旧类 X509Principal 实现了这个接口(interface),这与 X500Name 不同。使用什么类?
谢谢
最佳答案
我建议使用充气城堡类:org.bouncycaSTLe.jce.X509Principal
,它实现了 java.security.Principal
。为了获得 org.bouncycaSTLe.jce.X509Principal
实例,您可以使用以下方法:
public static org.bouncycastle.jce.X509Principal getSubjectX509Principal(
java.security.cert.X509Certificate cert) throws CertificateEncodingException
org.bouncycaSTLe.jce.PrincipalUtil
类的。
我给你一个例子:
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 字段,但是如果您想使用实现 java.security.Principal
的类,请使用 javax.security.auth.x500.X500Principal
,我再举个例子:
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()));
}
}
关于java - X500Name 到 java.security.Principal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23362698/
我正在使用 Fluent Azure SDK for .NET 尝试获取租户中所有服务主体的列表。 var authenticatedContext = Azure.Authenticate(
我需要查找哪个主体修改或创建了给定主体。 我们可以使用 Microsoft Graph Api 获得修改后的主体列表: https://graph.microsoft.com/beta/service
我目前在 Azure 中有 10 个 SQL 数据库。在 Azure 门户中,我有我的用户名 (omnipos)。 当我想使用 MSSM 连接到数据库时,出现错误 无法作为数据库主体执行,因为主体“[
我正在尝试追踪 glassfish 中的一条烦人的消息正在污染我们的日志文件的原因。 为了简化我们的设置,我们有 2 个运行 3.1.2.2 的 glassfish 服务器。 服务器 A 上部署了一个
我在应用程序中使用springSecurityCore插件,并且用户在appStartupController中登录后,我喜欢 def index = { if (springSecurityS
你好,你好吗?我是 Azure 中组织订阅的唯一所有者,我需要创建服务主体。 我如何向我的用户授予权限?或者我可以创建一个新角色来分配此权限吗? 有什么想法吗? 提前致谢 最佳答案 注意:订阅的角色和
我很困惑为什么在 WebAPI 中需要设置 Principal,因为每次调用都是完全无状态的。因为每次调用都应该是完全无状态的,所以使用您记录的用户信息设置它有什么好处和原因? 我的印象是,一个登录的
我一直在看这篇文章: http://pythonhosted.org/Flask-Principal/#granular-resource-protection 现在虽然它当前的工作方式没有任何问题,
我是编写 flask 的新手,目前使用 flask-principal 作为我的授权机制。当用户试图在没有所需权限的情况下访问 url 时,flask-principal 会引发 Permission
Spring Security 假设 Authentication 是 Principal 。 public interface Authentication extends Principal, S
在装饰器中调用安全身份验证属性 principal.displayName 是否会导致问题? 我将其设置为 sitemesh 装饰器中的变量:
我正在Grails中编写更新或更改用户数据表单。这是我表单的一部分,用户可以在其中更改其旧登录名: Логин ... 更新之前必须显示旧的用户数据。我用它:${springSe
在我的 ASP 项目中,我使用的是 ASP.NET Identity 2.2.1。在许多地方,我必须获得当前(登录)用户的电子邮件。现在我发现那个用户使用这个: var user = await Us
为什么 Principal.IsMemberOf(GroupPrincipal) ( MSDN ) 在以下测试中为 Domain Computers 组返回假阴性? [TestMethod] publ
我正在尝试确定给定的本地用户帐户是否在本地管理员组中。在系统加入域之前一切正常。当加入域时抛出异常,提示未找到网络路径,但仅在查找本地非管理员帐户时才会抛出异常;如果测试帐户是本地管理员,则该方法返回
我有一个在 Tomcat 中运行的网络应用程序。我想允许任何拥有服务器信任的有效证书的用户访问 Web 应用程序,但我想从证书中读取用户的 DN。我用 clientAuth="true"配置了 SSL
有没有一种标准的方法可以将 CSS 文件命名为主体文件?我有两个 CSS 文件(一个用于 Bootstrap,一个用于我的自定义 CSS),我希望自定义文件中的所有样式对所有元素文件都同样重要。但我也
所有,我正在编写一个依赖于 flask-principal 的 flask 应用程序用于管理用户角色。我想编写一些简单的单元测试来检查哪些用户可以访问哪些 View 。已发布代码示例 on paste
在谈论 .NET 中的身份时,我们想到了 Principal .有接口(interface) IPrincipal并与它一起实现 ClaimsPrincipal .我们甚至可以随时使用 Thread.
本文整理了Java中org.apache.wss4j.common.principal.WSUsernameTokenPrincipalImpl类的一些代码示例,展示了WSUsernameTokenP
我是一名优秀的程序员,十分优秀!