nginx 中的 HTTP 客户端证书变量是空的吗?

nginx 中的 HTTP 客户端证书变量是空的吗?

我正在尝试在 nginx 中获取 HTTP 客户端证书,但总是返回空白。

  • $ssl_客户端证书
  • $ssl_client_指纹
  • $ssl_client_raw_cert
  • $ssl_客户端序列号

以上内容均返回空白。

server {
    listen   8014;
    server_name  localhost;

    ssl    on;
    ssl_certificate    /root/cert/certificates/nginx-selfsigned.crt;
    ssl_certificate_key    /root/cert/certificates/nginx-selfsigned.key;

    location / {
    proxy_set_header ssl-hash $ssl_client_fingerprint;
    proxy_set_header ssl-cert $ssl_client_cert;
    proxy_set_header ssl-raw-cert $ssl_client_raw_cert;
    proxy_pass       http://127.0.0.1:3128;
}}

我尝试将变量传递给我的 go 应用程序但标题是空白的。

server {
    listen       8014;
    server_name  localhost;

    ssl    on;
    ssl_certificate    /root/cert/certificates/nginx-selfsigned.crt;
    ssl_certificate_key    /root/cert/certificates/nginx-selfsigned.key;
    location / {
            root        /opt/hthash;
            index  index.html index.htm index.php;
                autoindex on;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

        location ~ \.php$ {
        root           /opt/hthash;
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param SSL_CLIENT_CERT       $ssl_client_cert;
        fastcgi_param SSL_CLIENT_RAW_CERT   $ssl_client_raw_cert;
        fastcgi_param SSL_CLIENT_FPRINT       $ssl_client_fingerprint;
        fastcgi_param SSL_CLIENT_SERIAL     $ssl_client_serial;
        include        fastcgi_params;
}}

也尝试使用 fastcgi php 但仍然没有成功。

谁能告诉我如何通过反向代理或任何其他解决方案获取 HTTP 客户端证书?

任何帮助都将不胜感激。

答案1

未指定ssl_verify_client无论在哪里,您的服务器都不会要求客户端提供证书。这意味着没有证书。

您需要将其设置为on(需要证书)、optional(请求证书但不需要)或optional_no_ca(请求证书但不需要;也未经验证)。

相关内容