java - 为什么 Nginx 以相反的顺序提供客户端 SSL DN?

标签 java nginx openssl ldap spring-ldap

我很好奇为什么有些 Web 服务器(例如 Nginx)以相反的顺序提供客户端 SSL DN。

Web 应用程序正在将 DN 发布到 Java Web 服务,该服务正在尝试创建 Java javax.naming.ldap.LdapName .

标准顺序(LDAP 或 X500Name):

"CN=Jimmy Blooptoop,OU=Someplace,OU=Employees,DC=Bloopsoft-Inc"

逆序(OpenSSL 联机格式)(Nginx 返回的内容为 _$ssl_client_s_dn_):

"/DC=Bloopsoft-Inc/OU=Employees/OU=Someplace/CN=Jimmy Blooptoop"

这是为什么?

哪个符合 LDAP RFC?

他们都是吗?

关于 LDAP RFC 的注释:

有许多与 LDAP 相关的 RFC:https://www.ldap.com/ldap-specifications-defined-in-rfcs

许多人提到了不同的,这里是对它们的快速历史的尝试:

  • 1993 年 7 月:RFC 1485 - 专有名称的字符串表示
  • 1995 年 3 月:RFC 1779 - 专有名称的字符串表示
  • 1997 年 12 月:RFC 2253 - 轻量级目录访问协议(protocol) (v3):可分辨名称的 UTF-8 字符串表示
  • 2002 年 9 月:RFC 3377 - 轻型目录访问协议(protocol) (v3):技术规范(更新 RFC 2253)
  • 2003 年 3 月:RFC 3494 - 轻型目录访问协议(protocol)版本 2 (LDAPv2) 达到历史状态(即将停用的 RFC 1485、RFC 1779)
  • 2006 年 6 月:RFC 4514 - 轻量级目录访问协议(protocol) (LDAP):专有名称的字符串表示

最近的一个,它淘汰了其他的: RFC 4514: Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names

Java 库:

是否有 Java 库来回转换(从反向到不反向)? LdapName 抛出 InvalidNameException。好像应该有,反格式出现的比较频繁。

Java 库

Ngninx 注释:

链接:

最佳答案

Why is this?

这是因为这是 OpenSSL 返回的内容。 Apache HTTPD 做同样的事情,因为它也使用 OpenSSL。

Which one matches the LDAP RFC?

您描述为“标准订单”的那个。然而,这是一个 SSL 证书和一个 SSL API。它与 LDAP 没有任何关系,也没有理由它应该符合任何 LDAP RFC。这只是提供证书主题 DN 的另一种方式。这是由 X.509 定义的,而不是由 LDAP 定义的(尽管最终它们都是由 X.500 定义的,至少最初是这样)。

Is there a Java library to convert back and forth (from reverse to not reverse)

题外话,据我所知,但写起来很容易:

public class OpenSSLSubjectName
{
    private String  name;

    public OpenSSLSubjectName(String name)
    {
        this.name = name;
    }

    public String   getX500Name() throws NamingException
    {
        return getLdapName().toString();
    }

    public LdapName getLdapName() throws NamingException
    {
        List<Rdn>   rdns = new LinkedList<>();
        String[]    parts = name.split("/");
        for (int i = 1; i < parts.length; i++)
        {
            rdns.add(new Rdn(parts[i]));
        }
        return new LdapName(rdns);
    }
}

环境与环境

关于java - 为什么 Nginx 以相反的顺序提供客户端 SSL DN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33769978/

相关文章:

java - 单元测试 Spring Boot 应用程序端点

java - 可以有没有设置时区的机器吗?

angular - 配置K8s Nginx入口以将流量路由到两个单独的Angular SPA站点

openssl - 创建证书时遇到"Error adding attribute"

ssl - 自签名证书 : Can I trust the client being indeed the owner of the public key?

java - 将 Maven 依赖项添加到我的 Maven 项目时找不到资源

java - Spring Boot 不从 application.properties 加载用户名

python - Nginx:将 WordPress URL 映射到新的静态网站

nginx - 用于视频流平台的开源 CMS 和服务器

ssl - 更改自签名证书的主题属性