Wie mache ich eine sichere Anfrage?

Seit heute Morgen versuche ich, einen POST-Request auf meiner entfernten Datenbank mit dem https-Protokoll zu simulieren, weil ich ein SSL-Zertifikat installiert habe. (meine Website ist sicher).

https://example.com/api/v1/data_tag

Aber wenn ich versuche, eine Postman-Anfrage im sicheren Modus an meine Datenbank zu senden, erhalte ich diesen Fehler:

SSL Error: Unable to verify the first certificate

Wenn ich das "s" von https in meiner URL entferne, wird die Anfrage korrekt ausgeführt.

http://biotagsensor.com:3000/api/v1/data_tag

Ich habe die Firewalls meines Servers folgendermaßen konfiguriert:

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
80/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere
80/tcp (Nginx HTTP)        ALLOW IN    Anywhere
3000                       ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)
80/tcp (v6)                ALLOW IN    Anywhere (v6)
443/tcp (v6)               ALLOW IN    Anywhere (v6)
80/tcp (Nginx HTTP (v6))   ALLOW IN    Anywhere (v6)
3000 (v6)                  ALLOW IN    Anywhere (v6)

und hier ist die Standarddatei von nginx:

upstream backend {
        server localhost:3000;
}

server {
  listen 80;
  rewrite ^ https://$host$request_uri? permanent;
}

server {
#        listen 80 default_server;
#        listen [::]:80 default_server;

        listen 443 ssl;

        ssl_certificate /home/debian/site.com.chain.pem;
        ssl_certificate_key /home/debian/myserver.key;

        root /home/debian/site.com/dist;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location  ^~ /api {
               proxy_redirect off;
               proxy_http_version 1.1;
               proxy_pass http://backend;
               proxy_set_header Host $host ;
               proxy_set_header X-Real-IP $remote_addr;
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       }


        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

}

Wisst ihr woher das kommen kann?


64
2

Antworten:

 http://ipadress:3000/api/v1/data_tag

Dies ist Ihr interner Server, der nicht HTTPS-fähig ist. Sie greifen sogar explizit mit einfachem HTTP von Ihrem nginx auf diesen Server zu:

           proxy_pass http://backend;

Wenn Sie das in nginx konfigurierte HTTPS verwenden möchten, müssen Sie den in nginx für HTTPS konfigurierten Port verwenden, d.h.

  https://example.com:443/api/v1/data_tag

Oder einfacher, da 443 der Standardport für HTTPS ist:

  https://example.com/api/v1/data_tag

example.com ist in diesem Fall der Platzhalter für Ihre Domain, die für Ihren Server und innerhalb des Zertifikats konfiguriert ist.


Gelöst

Anscheinend haben Sie ein falsch konfiguriertes Zwischenzertifikat. Überprüfen Sie, ob site.com.chain.pem den richtigen Inhalt hat und der Pfad dorthin korrekt ist.