为什么jetty将证书主题参数S转换为ST?

时间:2017-04-04 14:25:47

标签: java ssl jetty ssl-certificate

我使用带主题的证书

    @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);
        }
    }

但是当我试图在我的servlet中获取此证书时:

certificate

CN=operator-1505, O=Test org, L=Moscow, ST=Moscow, C=RU 变量中的主题是:

{{1}}

为什么jetty将S参数转换为ST?

1 个答案:

答案 0 :(得分:2)

S(或ST)并非真正在证书中。它包含的是对象标识符(OID)2.5.4.8

OpenSSL过去常常a snarky comment说这个OID的缩写形式的权威答案是“ST”,但微软使用“S”。

可能的情况是,两个不同的RFC引用了具有不同简短形式的相同OID,并且每个库最终都有自己的答案,用于该特定值的使用。

如果您可以使用在各种环境中保持稳定的OID值打印名称,否则您可能只需要在S=ST=上找到匹配方式。

编辑:我很高兴地注意到ITU-T X.520(2012/10)说“ST”是正确答案,而使用S =作为示例:

  

6.3.3州或省名

     

州或省名称属性类型指定州或省。当用作目录名的一个组件时,它标识一个地理细分,命名对象在物理上位于该地理细分中,或者以某种其他重要方式与之关联。

     

State或Province Name的属性值是一个字符串,例如 S =“Ohio”

stateOrProvinceName ATTRIBUTE ::= {
  SUBTYPE OF name
  WITH SYNTAX UnboundedDirectoryString
  LDAP-SYNTAX directoryString.&id
  LDAP-NAME {"st"}
  ID id-at-stateOrProvinceName }

(强调我的,遗憾的是我不能拥有“ LDAP-NAME {”st“} ”强调和空白保留“

相关问题