为什么Nginx $ ssl_client_i_dn的格式突然改变了?


13

我们正在使用客户端证书来认证我们的一位客户。

我们的设置是这样的:在Django应用程序的前面有nginx。在我们的nginx配置中,我们具有必需的参数,以使实际的客户端证书验证有效(ssl_client_certificatessl_verify_client等等),并且

uwsgi_param X-Client-Verify $ssl_client_verify;
uwsgi_param X-Client-DN $ssl_client_s_dn;
uwsgi_param X-SSL-Issuer $ssl_client_i_dn;

这意味着我们将这些变量的值输入到我们的Django应用中。然后,Django应用程序使用此信息来识别正在连接的用户并对其进行授权。

我们已经成功使用了几个月,没有任何问题,突然之间我们开始收到有关人们无法使用证书登录的报告。原来,$ssl_client_s_dn$ssl_client_i_dn值的格式已从斜杠分隔的格式进行了更改:

 /C=SE/O=Some organziation/CN=Some CA

转换为逗号分隔的格式:

CN=Some CA,O=Some organization,C=SE

解决这个问题很容易,但是我不明白为什么。所以我的问题确实是:

  1. 价值$ssl_client_s_dn从何而来?它是由nginx设置的吗?客户端?
  2. 此值可以有格式的任何文档/规范,并且它有名称吗?

Answers:


18

之所以更改它们是因为nginx在1.11.6版中对其进行了更改。如更改日志中所示:

    *) Change: format of the $ssl_client_s_dn and $ssl_client_i_dn variables
       has been changed to follow RFC 2253 (RFC 4514); values in the old
       format are available in the $ssl_client_s_dn_legacy and
       $ssl_client_i_dn_legacy variables.

如果要避免这种情况,则应坚持使用稳定的版本,而不是不稳定的主线版本。无论哪种方式,都应先进行测试,然后再盲目升级产品。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.