- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 java 中验证 DN。到目前为止,我已尝试使用 Bouncy caSTLe 库对其进行验证
private boolean isValidDn(String dn) {
try {
X509Name name = new X509Name(dn);
return true;
} catch (IllegalArgumentException e) {
}
return false;
}
这段代码可以工作,但问题是这段代码允许有多个 CN。
例如:此代码对于 CN=first,CN=second,ou=org,ou=org2,c=US 返回 true
但我希望只有在有一个 cn、ou、o、c 等时才返回 true 的验证。
如有任何帮助,我们将不胜感激。
最佳答案
如果您使用以下枚举,您应该能够迭代 X500Name
或 X509Name
可能的每个元素。
public enum MyBCStyle {
/**
* country code - StringType(SIZE(2))
*/
C(BCStyle.C),
/**
* organization - StringType(SIZE(1..64))
*/
O(BCStyle.O ),
/**
* organizational unit name - StringType(SIZE(1..64))
*/
OU(BCStyle.OU),
/**
* Title
*/
T(BCStyle.T ),
/**
* common name - StringType(SIZE(1..64))
*/
CN(BCStyle.CN ),
/**
* device serial number name - StringType(SIZE(1..64))
*/
SN(BCStyle.SN ),
/**
* street - StringType(SIZE(1..64))
*/
STREET(BCStyle.STREET ),
/**
* device serial number name - StringType(SIZE(1..64))
*/
SERIALNUMBER(BCStyle.SERIALNUMBER),
/**
* locality name - StringType(SIZE(1..64))
*/
L(BCStyle.L ),
/**
* state, or province name - StringType(SIZE(1..64))
*/
ST(BCStyle.ST ),
/**
* Naming attributes of type X520name
*/
SURNAME(BCStyle.SURNAME ),
GIVENNAME(BCStyle.GIVENNAME ),
INITIALS(BCStyle.INITIALS ),
GENERATION(BCStyle.GENERATION ),
UNIQUE_IDENTIFIER(BCStyle.UNIQUE_IDENTIFIER ),
/**
* businessCategory - DirectoryString(SIZE(1..128)
*/
BUSINESS_CATEGORY(BCStyle.BUSINESS_CATEGORY ),
/**
* postalCode - DirectoryString(SIZE(1..40)
*/
POSTAL_CODE(BCStyle.POSTAL_CODE ),
/**
* dnQualifier - DirectoryString(SIZE(1..64)
*/
DN_QUALIFIER(BCStyle.DN_QUALIFIER ),
/**
* RFC 3039 Pseudonym - DirectoryString(SIZE(1..64)
*/
PSEUDONYM(BCStyle.PSEUDONYM ),
/**
* RFC 3039 DateOfBirth - GeneralizedTime - YYYYMMDD000000Z
*/
DATE_OF_BIRTH(BCStyle.DATE_OF_BIRTH ),
/**
* RFC 3039 PlaceOfBirth - DirectoryString(SIZE(1..128)
*/
PLACE_OF_BIRTH(BCStyle.PLACE_OF_BIRTH ),
/**
* RFC 3039 Gender - PrintableString (SIZE(1)) -- "M", "F", "m" or "f"
*/
GENDER(BCStyle.GENDER ),
/**
* RFC 3039 CountryOfCitizenship - PrintableString (SIZE (2)) -- ISO 3166
* codes only
*/
COUNTRY_OF_CITIZENSHIP(BCStyle.COUNTRY_OF_CITIZENSHIP ),
/**
* RFC 3039 CountryOfResidence - PrintableString (SIZE (2)) -- ISO 3166
* codes only
*/
COUNTRY_OF_RESIDENCE(BCStyle.COUNTRY_OF_RESIDENCE ),
/**
* ISIS-MTT NameAtBirth - DirectoryString(SIZE(1..64)
*/
NAME_AT_BIRTH(BCStyle.NAME_AT_BIRTH ),
/**
* RFC 3039 PostalAddress - SEQUENCE SIZE (1..6) OF
* DirectoryString(SIZE(1..30))
*/
POSTAL_ADDRESS(BCStyle.POSTAL_ADDRESS ),
/**
* RFC 2256 dmdName
*/
DMD_NAME(BCStyle.DMD_NAME ),
/**
* id-at-telephoneNumber
*/
TELEPHONE_NUMBER(BCStyle.TELEPHONE_NUMBER),
/**
* id-at-name
*/
NAME(BCStyle.NAME),
/**
* Email address (RSA PKCS#9 extension) - IA5String.
* <p>Note: if you're trying to be ultra orthodox, don't use this! It shouldn't be in here.
*/
EmailAddress(BCStyle.EmailAddress),
/**
* more from PKCS#9
*/
UnstructuredName(BCStyle.UnstructuredName),
UnstructuredAddress(BCStyle.UnstructuredAddress),
E(BCStyle.E),
DC(BCStyle.DC),
/**
* LDAP User id.
*/
UID(BCStyle.UID );
private ASN1ObjectIdentifier identifier;
public ASN1ObjectIdentifier getIdentifier() {
return identifier;
}
private MyBCStyle(ASN1ObjectIdentifier asn1ObjectIdentifier) {
this.identifier = asn1ObjectIdentifier;
}
}
这样你就可以做到
for(MyBCStyle bcStyle : MyBCStyle.values()) {
if(x500name.getRDNs(bcStyle.getIdentifier()).length > 1) {
throw new IllegalArgumentException("Multiple " + bcStyle.name() + " was found.");
}
}
关于java - 如何在 Java 中验证可分辨名称 (DN)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28294523/
当我查找 DN 时带 Spring ldapTemplate , 我必须省略配置的基本 DN。 例如,当基本 DN 配置为 dc=company,dc=com 时,工作查找就像 ldapTemplat
在我的 LDAP 客户端程序中,有时我必须在搜索过滤器中包含 DN 值。但是这个 DN 经常变化,每次我都必须在我的代码中更改这个过滤器。 当我用谷歌搜索它时,我得到了这样的东西 假设您想从 R&D
如何在javascript中写一个必须遵循条件的正则表达式 DN 地址中的所有段都应遵循 cn=,ou=,o=,o=swift 序列 所有段都应该用,分隔. DN 地址最多应包含 100 个字符。 不
我最近在代码中遇到了这一行 - fprintf(logfile," |-IP Version : %dn",(unsigned int)iph->version); 这里的“%dn”
在我们的应用程序中,我们为平台和用户等内部实体生成证书。我们的内部实体由自定义 DN 标识: 平台 DN:p=平台名称 用户DN:cn=userName,p=platformName 我们尝试使用 o
我完全陷入了如何使用新值更新CSV文件中的多行的问题。问题如下,我将一个 Activity 目录csv导出文件导入了大约有500个用户的powershell中,如下所示: $Users = Impor
我进行了 LDAP 目录搜索并收到了一些结果。我需要迭代这些结果并显示每个条目的 Dn。 在我的测试环境中,我通过获取entryDN属性的值来返回Dn值。 在生产环境中,entryDN 属性始终返回
我目前在搜索 DN 包含逗号的条目时遇到问题: StringTokenizer st = new StringTokenizer(dn, "="); Attributes searchAttribut
我用下面的代码有两个目标 1) 获取属于特定广告组的用户列表 2) 获取属于该组的所有用户的电子邮件/姓氏/名字 如果有更好的方法来实现这两个目标,请告诉我。 我能够获得完整的 DN,但我不确定如何从
我想要一个正则表达式来验证所有可能的 DN 类型 我创造了一个,但它不是很好。 /([A-z0-9=]{1}[A-z0-9]{1})*[,??]/ 和其他一些 通过更改它,但徒劳无功。 可能的 DN
我有一个九节点 Cassandra 集群,一切似乎都运行良好,除了我的两台服务器相互显示为 DN。集群中的所有其他节点将所有节点显示为 UN。这两个显示除彼此之外的所有节点 UN,其中它们彼此显示为
我知道以前有人回答过这个问题,但它无法帮助我(除非它有帮助,但由于我的 php 知识有限,它没有帮助)。下面是我的代码: >Could not connect to LDAP server
我已经很清楚如何在 GRPC++ 中建立双向认证的 SSL 通信,但现在我希望在建立的 TLS 通信中获得获取 SSL 客户端 DN 的方式,以进行进一步的身份状态分类。 如果您有一些建议,谢谢。 最
什么是使用 python 获取 SSL 的主题 DN 的好方法? 这包括以下内容: 国名 州名 地区名称 组织名称 通用名 最佳答案 就像是: import ssl import socket fro
我目前正在为我的公司编写一个工具(在 ANSI C 中),它从 LDAP 目录中读取并以特定格式(即:我们旧的专有目录 db 的名称格式)输出所有数据。 然后由另一个工具处理,该工具读取输出等等...
我正在尝试对位于目录根目录的许多不同 OU 执行 LDAP 搜索。 上下文初始化: Hashtable env = new Hashtable(); env.put(Context.SECURITY_
我如何为 LDAP 搜索制作 bourne shell 代码以不返回 DN 而只返回 CN?我为此使用 iTerm2。 最佳答案 如果您只想查看 cn结果,然后您可以使用以下内容: ldapsearc
您好我正在尝试使用我的 ldap 测试服务器来验证 openca 中的用户。 我目前正在通过 phpldapadmin 连接: Login DN : cn=admin,dc=example,dc=co
我构建了一些假设 LDAP DN 不区分大小写的功能。 我已经使用 ActiveDirectory、Oracle 和 OpenLDAP 对其进行了检查,并且不区分大小写。 是否适用于所有 LDAP?
我知道你不能简单地过滤 dn,但我有这样的东西: dc=lvl3,dc=lvl2,dc=lvl1,有人可能有这样的 dn:CN=Last, First,OU=ou1,OU=retired,OU=ou1
我是一名优秀的程序员,十分优秀!