ML
    • Recent
    • Categories
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    Solved Nginx Certificate Authentication issue

    IT Discussion
    nginx certificates authentication
    2
    13
    3.4k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • JaredBuschJ
      JaredBusch
      last edited by

      What have you done do configure your site?

      I can spin up CentOS 7 install Nginx, and immediately have it serving SSL with no special configuration.

      This is my nginx.conf that to my recollection has zero modifications.
      [jbusch@nginxproxy ~]$ cat /etc/nginx/nginx.conf

      # For more information on configuration, see:
      #   * Official English Documentation: http://nginx.org/en/docs/
      #   * Official Russian Documentation: http://nginx.org/ru/docs/
      
      user nginx;
      worker_processes auto;
      error_log /var/log/nginx/error.log;
      pid /run/nginx.pid;
      
      events {
          worker_connections 1024;
      }
      
      http {
          log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                            '$status $body_bytes_sent "$http_referer" '
                            '"$http_user_agent" "$http_x_forwarded_for"';
      
          access_log  /var/log/nginx/access.log  main;
      
          sendfile            on;
          tcp_nopush          on;
          tcp_nodelay         on;
          keepalive_timeout   65;
          types_hash_max_size 2048;
      
          include             /etc/nginx/mime.types;
          default_type        application/octet-stream;
      
          # Load modular configuration files from the /etc/nginx/conf.d directory.
          # See http://nginx.org/en/docs/ngx_core_module.html#include
          # for more information.
          include /etc/nginx/conf.d/*.conf;
      
          server {
              listen       80 default_server;
              listen       [::]:80 default_server;
              server_name  _;
              root         /usr/share/nginx/html;
      
              # Load configuration files for the default server block.
              include /etc/nginx/default.d/*.conf;
      
              location / {
              }
      
              error_page 404 /404.html;
                  location = /40x.html {
              }
      
              error_page 500 502 503 504 /50x.html;
                  location = /50x.html {
              }
          }
          server {
              listen       443 default_server;
              listen       [::]:443 default_server;
              server_name  _;
              root         /usr/share/nginx/html;
              ssl          on;
              ssl_certificate /etc/ssl/cacert.pem;
              ssl_certificate_key /etc/ssl/privkey.pem;
              ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
      
              # Load configuration files for the default server block.
              include /etc/nginx/default.d/*.conf;
      
              location / {
              }
      
              error_page 404 /404.html;
                  location = /40x.html {
              }
      
              error_page 500 502 503 504 /50x.html;
                  location = /50x.html {
              }
          }
      
      }
      
      Emad RE 1 Reply Last reply Reply Quote -1
      • JaredBuschJ
        JaredBusch
        last edited by

        Then for each site that I proxy, I have a specific *.conf file.

        [jbusch@nginxproxy ~]$ ls -l /etc/nginx/conf.d/
        total 68
        -rw-r--r--. 1 root root 1334 May 12 14:37 assets.domaina.com.conf
        -rw-r--r--. 1 root root  446 Nov 16  2015 domainc.com.conf
        -rw-r--r--. 1 root root 1306 May 12 14:25 community.domaina.com.conf
        -rw-r--r--. 1 root root 1289 May 12 22:56 crm.domaina.com.conf
        -rw-r--r--. 1 root root 1092 May 26 14:02 domainb.com.conf
        -rw-r--r--. 1 root root 1253 May 12 14:27 helpdesk.domaina.com.conf
        -rw-r--r--. 1 root root 1087 May 29 13:18 naggaroth.domainb.com.conf
        -rw-r--r--. 1 root root 1226 May 12 14:28 domaind.com.conf
        -rw-r--r--. 1 root root 1235 May 12 14:29 nc.domaina.com.conf
        -rw-r--r--. 1 root root 1362 May 12 14:29 nc.domainb.com.conf
        -rw-r--r--. 1 root root 1237 May 12 14:29 obelisk.domainb.com.conf
        -rw-r--r--. 1 root root 1066 May 12 14:29 oc.domainb.com.conf
        -rw-r--r--. 1 root root 1110 May 12 14:30 domaine.com.conf
        -rw-r--r--. 1 root root 1273 May 12 14:31 support.domaina.com.conf
        -rw-r--r--. 1 root root 1257 May 12 14:31 timereport.domaina.com.conf
        -rw-r--r--. 1 root root 1247 Aug  1 17:45 unifi.domaina.com.conf
        -rw-r--r--. 1 root root 1290 Aug  1 15:51 unms.domaina.com.conf
        
        1 Reply Last reply Reply Quote 0
        • JaredBuschJ
          JaredBusch
          last edited by

          And here is what goes in a conf file that handles SSL.

          [jbusch@nginxproxy ~]$ cat /etc/nginx/conf.d/community.domaina.com.conf
          server {
              client_max_body_size 40M;
              listen 443 ssl;
              server_name community.domaina.com;
              ssl          on;
              ssl_certificate /etc/letsencrypt/live/support.domaina.com/fullchain.pem;
              ssl_certificate_key /etc/letsencrypt/live/support.domaina.com/privkey.pem;
              ssl_stapling on;
              ssl_stapling_verify on;
              ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
              ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
              ssl_prefer_server_ciphers on;
              ssl_session_cache shared:SSL:10m;
              ssl_dhparam /etc/ssl/certs/dhparam.pem;
              add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";
          
              location / {
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                  proxy_set_header X-Forwarded-Proto $scheme;
                  proxy_set_header Host $http_host;
                  proxy_set_header X-NginX-Proxy true;
                  proxy_pass http://10.254.0.35:4567;
                  proxy_redirect off;
          
                  # Socket.IO Support
                  proxy_http_version 1.1;
                  proxy_set_header Upgrade $http_upgrade;
                  proxy_set_header Connection "upgrade";
          
              }
          }
          server {
              client_max_body_size 40M;
              listen 80;
              server_name community.domaina.com;
              rewrite        ^ https://$server_name$request_uri? permanent;
          }
          
          1 Reply Last reply Reply Quote 1
          • JaredBuschJ
            JaredBusch
            last edited by

            As you can see, I obtained my SSL from LetsEncrypt and this is forwarding to a NodeBB forum

            1 Reply Last reply Reply Quote 0
            • Emad RE
              Emad R @JaredBusch
              last edited by

              @jaredbusch said in Nginx Certificate Authentication issue:

              What have you done do configure your site?

              I can spin up CentOS 7 install Nginx, and immediately have it serving SSL with no special configuration.

              This is my nginx.conf that to my recollection has zero modifications.
              [jbusch@nginxproxy ~]$ cat /etc/nginx/nginx.conf

              # For more information on configuration, see:
              #   * Official English Documentation: http://nginx.org/en/docs/
              #   * Official Russian Documentation: http://nginx.org/ru/docs/
              
              user nginx;
              worker_processes auto;
              error_log /var/log/nginx/error.log;
              pid /run/nginx.pid;
              
              events {
                  worker_connections 1024;
              }
              
              http {
                  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                                    '$status $body_bytes_sent "$http_referer" '
                                    '"$http_user_agent" "$http_x_forwarded_for"';
              
                  access_log  /var/log/nginx/access.log  main;
              
                  sendfile            on;
                  tcp_nopush          on;
                  tcp_nodelay         on;
                  keepalive_timeout   65;
                  types_hash_max_size 2048;
              
                  include             /etc/nginx/mime.types;
                  default_type        application/octet-stream;
              
                  # Load modular configuration files from the /etc/nginx/conf.d directory.
                  # See http://nginx.org/en/docs/ngx_core_module.html#include
                  # for more information.
                  include /etc/nginx/conf.d/*.conf;
              
                  server {
                      listen       80 default_server;
                      listen       [::]:80 default_server;
                      server_name  _;
                      root         /usr/share/nginx/html;
              
                      # Load configuration files for the default server block.
                      include /etc/nginx/default.d/*.conf;
              
                      location / {
                      }
              
                      error_page 404 /404.html;
                          location = /40x.html {
                      }
              
                      error_page 500 502 503 504 /50x.html;
                          location = /50x.html {
                      }
                  }
                  server {
                      listen       443 default_server;
                      listen       [::]:443 default_server;
                      server_name  _;
                      root         /usr/share/nginx/html;
                      ssl          on;
                      ssl_certificate /etc/ssl/cacert.pem;
                      ssl_certificate_key /etc/ssl/privkey.pem;
                      ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
              
                      # Load configuration files for the default server block.
                      include /etc/nginx/default.d/*.conf;
              
                      location / {
                      }
              
                      error_page 404 /404.html;
                          location = /40x.html {
                      }
              
                      error_page 500 502 503 504 /50x.html;
                          location = /50x.html {
                      }
                  }
              
              }
              

              I can serve SSL content and I can proxy fine, thanks to a guide you wrote previously.

              What I am wondering or want to accomplish is

              	ssl_client_certificate "/etc/pki/nginx/ca.crt";		
              	ssl_verify_client on;
              

              Meaning no one can visit my https site, without installing .p12 cert on their browser, similar to VPN. Extra Security stuff.

              JaredBuschJ 2 Replies Last reply Reply Quote 0
              • JaredBuschJ
                JaredBusch @Emad R
                last edited by

                @emad-r said in Nginx Certificate Authentication issue:

                @jaredbusch said in Nginx Certificate Authentication issue:

                What have you done do configure your site?

                I can spin up CentOS 7 install Nginx, and immediately have it serving SSL with no special configuration.

                This is my nginx.conf that to my recollection has zero modifications.
                [jbusch@nginxproxy ~]$ cat /etc/nginx/nginx.conf

                # For more information on configuration, see:
                #   * Official English Documentation: http://nginx.org/en/docs/
                #   * Official Russian Documentation: http://nginx.org/ru/docs/
                
                user nginx;
                worker_processes auto;
                error_log /var/log/nginx/error.log;
                pid /run/nginx.pid;
                
                events {
                    worker_connections 1024;
                }
                
                http {
                    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                                      '$status $body_bytes_sent "$http_referer" '
                                      '"$http_user_agent" "$http_x_forwarded_for"';
                
                    access_log  /var/log/nginx/access.log  main;
                
                    sendfile            on;
                    tcp_nopush          on;
                    tcp_nodelay         on;
                    keepalive_timeout   65;
                    types_hash_max_size 2048;
                
                    include             /etc/nginx/mime.types;
                    default_type        application/octet-stream;
                
                    # Load modular configuration files from the /etc/nginx/conf.d directory.
                    # See http://nginx.org/en/docs/ngx_core_module.html#include
                    # for more information.
                    include /etc/nginx/conf.d/*.conf;
                
                    server {
                        listen       80 default_server;
                        listen       [::]:80 default_server;
                        server_name  _;
                        root         /usr/share/nginx/html;
                
                        # Load configuration files for the default server block.
                        include /etc/nginx/default.d/*.conf;
                
                        location / {
                        }
                
                        error_page 404 /404.html;
                            location = /40x.html {
                        }
                
                        error_page 500 502 503 504 /50x.html;
                            location = /50x.html {
                        }
                    }
                    server {
                        listen       443 default_server;
                        listen       [::]:443 default_server;
                        server_name  _;
                        root         /usr/share/nginx/html;
                        ssl          on;
                        ssl_certificate /etc/ssl/cacert.pem;
                        ssl_certificate_key /etc/ssl/privkey.pem;
                        ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
                
                        # Load configuration files for the default server block.
                        include /etc/nginx/default.d/*.conf;
                
                        location / {
                        }
                
                        error_page 404 /404.html;
                            location = /40x.html {
                        }
                
                        error_page 500 502 503 504 /50x.html;
                            location = /50x.html {
                        }
                    }
                
                }
                

                I can serve SSL content and I can proxy fine, thanks to a guide you wrote previously.

                What I am wondering or want to accomplish is

                  ssl_client_certificate "/etc/pki/nginx/ca.crt";		
                  ssl_verify_client on;
                

                Meaning no one can visit my https site, without installing .p12 cert on their browser, similar to VPN. Extra Security stuff.

                ok, now I am following.

                never tested that functionality myself form the admin side. Used it in the past as a user of someone else's system.

                1 Reply Last reply Reply Quote 0
                • JaredBuschJ
                  JaredBusch @Emad R
                  last edited by

                  @emad-r who owns the file?

                  ls -laZ /etc/pki/nginx/ca.crt
                  
                  Emad RE 1 Reply Last reply Reply Quote 0
                  • Emad RE
                    Emad R @JaredBusch
                    last edited by

                    @jaredbusch said in Nginx Certificate Authentication issue:

                    ls -laZ /etc/pki/nginx/ca.crt

                    -rw-r--r-- root root ?

                    JaredBuschJ 1 Reply Last reply Reply Quote 0
                    • JaredBuschJ
                      JaredBusch @Emad R
                      last edited by JaredBusch

                      @emad-r said in Nginx Certificate Authentication issue:

                      @jaredbusch said in Nginx Certificate Authentication issue:

                      ls -laZ /etc/pki/nginx/ca.crt

                      -rw-r--r-- root root ?

                      i specified -laZ intentionally to show the SELinux context also.

                      I don't have your directory setup, but this is what my /etc/pki/tls/certs looks like

                      drwxr-xr-x. root root system_u:object_r:cert_t:s0      .
                      drwxr-xr-x. root root system_u:object_r:cert_t:s0      ..
                      lrwxrwxrwx. root root system_u:object_r:cert_t:s0      ca-bundle.crt -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
                      lrwxrwxrwx. root root system_u:object_r:cert_t:s0      ca-bundle.trust.crt -> /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
                      -rw-r--r--. root root unconfined_u:object_r:cert_t:s0  dhparam.pem
                      -rwxr-xr-x. root root system_u:object_r:bin_t:s0       make-dummy-cert
                      -rw-r--r--. root root system_u:object_r:cert_t:s0      Makefile
                      -rwxr-xr-x. root root system_u:object_r:cert_t:s0      renew-dummy-cert
                      
                      Emad RE 2 Replies Last reply Reply Quote 1
                      • Emad RE
                        Emad R @JaredBusch
                        last edited by

                        @jaredbusch said in Nginx Certificate Authentication issue:

                        @emad-r said in Nginx Certificate Authentication issue:

                        @jaredbusch said in Nginx Certificate Authentication issue:

                        ls -laZ /etc/pki/nginx/ca.crt

                        -rw-r--r-- root root ?

                        i specified -laZ intentionally to show the SELinux context also.

                        I don't have your directory setup, but this is what my /etc/pki/tls/certs looks like

                        drwxr-xr-x. root root system_u:object_r:cert_t:s0      .
                        drwxr-xr-x. root root system_u:object_r:cert_t:s0      ..
                        lrwxrwxrwx. root root system_u:object_r:cert_t:s0      ca-bundle.crt -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
                        lrwxrwxrwx. root root system_u:object_r:cert_t:s0      ca-bundle.trust.crt -> /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
                        -rw-r--r--. root root unconfined_u:object_r:cert_t:s0  dhparam.pem
                        -rwxr-xr-x. root root system_u:object_r:bin_t:s0       make-dummy-cert
                        -rw-r--r--. root root system_u:object_r:cert_t:s0      Makefile
                        -rwxr-xr-x. root root system_u:object_r:cert_t:s0      renew-dummy-cert
                        

                        I see, I think my issue is related to openssl and CA setup, a missing step some where, was hoping for some easy setup guide so we can use this method instead of VPN, this would be a quicker and very secure way for special scenarios.

                        Cause I am testing this, Selinux is disabled. Once I succeed if I do I document then re-enable security features and test again.

                        JaredBuschJ 1 Reply Last reply Reply Quote 0
                        • JaredBuschJ
                          JaredBusch @Emad R
                          last edited by

                          @emad-r said in Nginx Certificate Authentication issue:

                          @jaredbusch said in Nginx Certificate Authentication issue:

                          @emad-r said in Nginx Certificate Authentication issue:

                          @jaredbusch said in Nginx Certificate Authentication issue:

                          ls -laZ /etc/pki/nginx/ca.crt

                          -rw-r--r-- root root ?

                          i specified -laZ intentionally to show the SELinux context also.

                          I don't have your directory setup, but this is what my /etc/pki/tls/certs looks like

                          drwxr-xr-x. root root system_u:object_r:cert_t:s0      .
                          drwxr-xr-x. root root system_u:object_r:cert_t:s0      ..
                          lrwxrwxrwx. root root system_u:object_r:cert_t:s0      ca-bundle.crt -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
                          lrwxrwxrwx. root root system_u:object_r:cert_t:s0      ca-bundle.trust.crt -> /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
                          -rw-r--r--. root root unconfined_u:object_r:cert_t:s0  dhparam.pem
                          -rwxr-xr-x. root root system_u:object_r:bin_t:s0       make-dummy-cert
                          -rw-r--r--. root root system_u:object_r:cert_t:s0      Makefile
                          -rwxr-xr-x. root root system_u:object_r:cert_t:s0      renew-dummy-cert
                          

                          I see, I think my issue is related to openssl and CA setup, a missing step some where, was hoping for some easy setup guide so we can use this method instead of VPN, this would be a quicker and very secure way for special scenarios.

                          Not sure what else you need. Point to the private key and the certificate.

                          Cause I am testing this, Selinux is disabled. Once I succeed if I do I document then re-enable security features and test again.

                          Always useful for eliminating a potential configuration problem.

                          1 Reply Last reply Reply Quote 0
                          • Emad RE
                            Emad R @JaredBusch
                            last edited by

                            @jaredbusch said in Nginx Certificate Authentication issue:

                            @emad-r said in Nginx Certificate Authentication issue:

                            @jaredbusch said in Nginx Certificate Authentication issue:

                            ls -laZ /etc/pki/nginx/ca.crt

                            -rw-r--r-- root root ?

                            i specified -laZ intentionally to show the SELinux context also.

                            I don't have your directory setup, but this is what my /etc/pki/tls/certs looks like

                            drwxr-xr-x. root root system_u:object_r:cert_t:s0      .
                            drwxr-xr-x. root root system_u:object_r:cert_t:s0      ..
                            lrwxrwxrwx. root root system_u:object_r:cert_t:s0      ca-bundle.crt -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
                            lrwxrwxrwx. root root system_u:object_r:cert_t:s0      ca-bundle.trust.crt -> /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
                            -rw-r--r--. root root unconfined_u:object_r:cert_t:s0  dhparam.pem
                            -rwxr-xr-x. root root system_u:object_r:bin_t:s0       make-dummy-cert
                            -rw-r--r--. root root system_u:object_r:cert_t:s0      Makefile
                            -rwxr-xr-x. root root system_u:object_r:cert_t:s0      renew-dummy-cert
                            

                            Thanks this pointed me in the right direction, a useful guide coming soon

                            1 Reply Last reply Reply Quote 0
                            • 1 / 1
                            • First post
                              Last post