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

我们正在使用客户端证书来validation我们的客户之一。

我们的设置是这样的:我们有一个Django应用程序前面的nginx。 在我们的nginxconfiguration中,我们有必要的参数来获得实际的客户端证书validation( 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; 

这意味着我们将这些variables的值传入我们的Django应用程序。 Django应用程序然后使用这些信息来确定哪个用户正在连接并授权他们。

我们已经成功地使用了几个月,没有任何问题,突然间我们开始收到关于人们无法使用证书login的报告。 事实certificate, $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. 有没有这个值的格式的文件/规范,它有一个名字?

他们改变了,因为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. 

如果你想避免这样的事情,你应该坚持稳定版本,而不是不稳定的主线版本。 无论如何,您应该先盲目升级产品,然后再进行testing。