Java 为什么jetty将证书主题参数S转换为ST?
我正在使用科目证书Java 为什么jetty将证书主题参数S转换为ST?,java,ssl,jetty,ssl-certificate,Java,Ssl,Jetty,Ssl Certificate,我正在使用科目证书 CN = operator-1505 O = Test org L = Moscow S = Moscow C = RU 但当我试图在servlet中获取此证书时: @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { X509Certificate[]
CN = operator-1505
O = Test org
L = Moscow
S = Moscow
C = RU
但当我试图在servlet中获取此证书时:
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
X509Certificate[] certificates = (X509Certificate[]) req.getAttribute("javax.servlet.request.X509Certificate");
if (certificates != null && certificates.length == 1) {
X509Certificate certificate = certificates[0];
authenticate(certificate, req, resp);
}
}
证书
变量中的主题为:
CN=operator-1505, O=Test org, L=Moscow, ST=Moscow, C=RU
为什么jetty将S参数转换为ST?证书中没有S
(或ST
)。它包含的是对象标识符(OID)
OpenSSL曾经说过,这个OID的缩写形式的权威答案是“ST”,但微软使用的是“S”
可能是两个不同的RFC以不同的简短形式引用了相同的OID,而每个库最终都有自己的答案来说明该特定值的用途
如果您可以使用OID值打印名称,这些OID值在不同的环境中应该是稳定的,否则您可能需要找到一种方法来匹配S=
或ST=
编辑:我很高兴地注意到(2012/10)说“ST”是正确答案,而使用S=作为示例:
6.3.3州或省名称
“州或省名称”属性类型指定州或省。当用作目录名的一个组成部分时,它标识了一个地理分区,命名对象位于该分区的物理位置或以其他重要方式与其关联
州或省名称的属性值是字符串,例如,S=“Ohio”
(强调我的,遗憾的是我不能同时强调“LDAP-NAME{“st”}”和保留空格)
stateOrProvinceName ATTRIBUTE ::= {
SUBTYPE OF name
WITH SYNTAX UnboundedDirectoryString
LDAP-SYNTAX directoryString.&id
LDAP-NAME {"st"}
ID id-at-stateOrProvinceName }