Immagino che il tuo router non sia abbastanza intelligente da configurare da solo un proxy inverso crittografato.
Convenzioni utilizzate di seguito
Controlli iniziali
Sulla rete locale puoi vedere la webcam a http://192.168.0.123:456
? Grande. Non riesci a connetterti alla webcam dal mondo esterno (cioè http://1.2.3.4:456
è disattivato dal firewall)? Grande. Se non riconfigurare la tua webcam e le regole di port forwarding / firewall sul tuo router.
Quindi, installa un server web su un computer sulla rete locale attivo ogni volta che desideri connetterti alla tua webcam. Assumerò linux / unix e darò istruzioni per nginx.
Come test iniziale, configura un proxy inverso senza crittografia. Installa l'ultima versione di nginx, modifica il file di configurazione ( /etc/nginx/conf.d/default.conf
) e aggiungi righe simili a:
server {
listen 8080;
location / {
proxy_pass http://192.168.0.123:456;
} # replace with your webcam's local IP address and port.
}
Ora riavvia nginx ( sudo /etc/init.d/nginx restart
) e prova a connetterti al proxy ( http://192.168.0.101:8080
) e dovrebbe funzionare come se fosse andato a http://192.168.0.123:456
. Se hai problemi, controlla di nuovo tutto o consulta la documentazione di nginx .
Come ottenere un certificato TLS / SSL
Ora è necessario aggiungere un certificato SSL e la chiave privata associata. Puoi crearne uno firmato da un'autorità di certificazione (ad es. Da startssl.com gratuitamente) o generarne uno che sia autofirmato (e che inizialmente non sarà considerato attendibile dai browser web). La configurazione di un certificato firmato dalla CA sarà più complicata per una rete domestica in cui dovrai ottenere un nome di dominio (che puoi dimostrare alla CA che possiedi), impostare il DNS dinamico su quel nome di dominio, ecc. stai provando ad iniziare con Dynamic DNS - link è un ottimo punto di partenza).
Per generare un certificato autofirmato, usa prima openssl per creare una chiave privata (in questo caso una chiave privata RSA 4096 bit):
# openssl genrsa -out private.key 4096
Se sei curioso, puoi visualizzare i contenuti con openssl rsa -in private.key -text -noout
. Successivamente è necessario generare un certificato basato su quella chiave privata, che può essere fatto con:
# openssl req -new -x509 -key private.key -out yourcert.crt -days 3650
Il 3650 dice che scadrà tra 3650 giorni (~ 10 anni). Openssl ti chiederà ulteriori dettagli, sentiti libero di lasciarli vuoti o di mettere qualsiasi informazione lì dentro. (Puoi visualizzare il contenuto del tuo certificato con openssl x509 -in yourcert.crt -text -noout
).
Ora metti la tua chiave privata e il certificato in un posto sicuro (ad es. in /etc/ssl/private/private.key
e /etc/ssl/certs/yourcert.crt
), limita le loro autorizzazioni (assicurati che sia di proprietà di root e nessun altro abbia permessi di lettura / scrittura).
Attiva SSL in Reverse Proxy
Quindi modifica il file di configurazione del tuo server nginx per abilitare SSL come segue:
server {
listen 443; # doesn't have to be port 443 - could be any port (say 8080) if you
# connect via https://192.168.0.101:8080 . But on port 443
# you can just use https://192.168.0.101
ssl on;
ssl_certificate /etc/ssl/certs/yourcert.crt;
ssl_certificate_key /etc/ssl/private/private.key;
# certificate and private key where you just placed them
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
# reasonable SSL configuration, disable some known weak ciphers.
location / {
proxy_pass http://192.168.0.123:456;
proxy_redirect http://192.168.0.123:456/ $scheme://$host:$server_port/;
# If your webcam (or other proxied application) ever gives URLs in the HTTP headers
# (e.g., in a 302 or 304 HTTP redirect),
# the proxy_redirect line changes the URL in the HTTP header field
# from http://192.168.0.123:456/some/path to https://192.168.0.1:8080/some/path
}
}
Riavvia nginx e ora dovresti riuscire a connetterti alla tua webcam sulla tua rete locale a https://192.168.0.101
(riceverai avvertimenti sul fatto che il certificato non è attendibile poiché è un certificato autofirmato).
Imposta il port forwarding nel tuo router
Il passaggio finale è configurare il router per eseguire il port forwarding. Questo è quando ti connetti a https://1.2.3.4
(porta 443) dal mondo esterno, impostalo su port-forward su 192.168.0.101
(porta 443). È possibile impostare il DNS dinamico in modo che, se l'indirizzo IP di casa cambia, punti ancora nel posto giusto. Alcuni ISP bloccano la porta 80 e 443, quindi potrebbe essere necessario cambiarla con un'altra porta.
Fai attenzione a come ti connetti. Ho notato che molti programmi di telecamere IP non controllano i certificati per la fiducia (dato che spesso sono autofirmati), quindi un utente malintenzionato potrebbe eseguire un attacco MitM inserendo un certificato autofirmato diverso. È meglio se aggiungi il tuo certificato autofirmato come affidabile nei tuoi browser e rifiutalo se cambia.