Vamos preparar o FindFace para trabalhar com SSL/HTTPS. Leia com atenção as orientações e comandos
-
No servidor principal criaremos o diretorio de configurações do Nginx com o subdiretorio que conterá o SSL(certificado e chave).
sudo mkdir -p /etc/nginx/ssl/
-
Crie a chave SSL e o certificado e coloque na pasta criada (/etc/nginx/ssl). Caso esteja usando certificados auto gerenciados, use o seguinte comando:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/my-example-domain.com.key -out /etc/nginx/ssl/my-example-domain.com.crt
Você será questinado sobre algumas informações sobre seu servidor a fim de gravar as informações corretamente no certificado. A pergunta mais importante será sobre o Common Name. Você precisa digitar o nome de domínio ou o IP público que será associado ao seu servidor. Ambos os arquivos criados(my-exmple-domain.com.key e my-example-domain.com.crt) estarão na pasta(/etc/nginx/ssl)
FindFace Video Worker
Ao usar CA-certificate, adicione o caminho do certificado aos volumes do serviço docker(no caso o findface-video-worker), adicione o comando de instalação e atulização do CA-certificate no serviço mesmo.
-
Abra o arquivo docker-compose.yaml
sudo vi /opt/findface-multi/docker-compose.yaml
-
Localize o serviço findface-video-worker e ajuste-o para que se pareça com o exemplo abaixo
-
CPU
findface-video-worker: entrypoint: ["sh", "-c", "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends --yes ca-certificates && update-ca-certificates && exec /tini -- /findface-video-worker-cpu --config=/etc/findface-video-worker.yaml"] depends_on: [findface-video-manager, findface-ntls, mongodb] image: docker.int.ntl/ntech/universe/video-worker-cpu:ffserver-8.221216 logging: {driver: journald} network_mode: service:pause restart: always volumes: ['./configs/findface-video-worker/findface-video-worker.yaml:/etc/findface-video-worker.yaml:ro', './models:/usr/share/findface-data/models:ro', './cache/findface-video-worker/models:/var/cache/findface/models_cache', './cache/findface-video-worker/recorder:/var/cache/findface/video-worker-recorder', '/etc/nginx/ssl/my-example-domain.crt:/usr/local/share/ca-certificates/my-example-domain.crt:ro']
-
GPU (Somente adicionar o caminho do certificado e atualizar o CA-certificate)
findface-video-worker: entrypoint: ["sh", "-c", "update-ca-certificates && exec /tini -- /findface-video-worker-gpu --config=/etc/findface-video-worker.yaml"] depends_on: [findface-video-manager, findface-ntls, mongodb] environment: [CUDA_VISIBLE_DEVICES=0] image: docker.int.ntl/ntech/universe/video-worker-gpu:ffserver-8.221216 logging: {driver: journald} network_mode: service:pause restart: always runtime: nvidia volumes: ['./configs/findface-video-worker/findface-video-worker.yaml:/etc/findface-video-worker.yaml:ro', './models:/usr/share/findface-data/models:ro', './cache/findface-video-worker/models:/var/cache/findface/models_cache', './cache/findface-video-worker/recorder:/var/cache/findface/video-worker-recorder', '/etc/nginx/ssl/my-example-domain.crt:/usr/local/share/ca-certificates/my-example-domain.crt:ro']
-
Para versões na CPU, a inicialização do serviço findface-video-worker(responsável pelas câmeras) vai demorar aproximadamente 15 segundos a mais.
- Reinicie todos os containers
cd /opt/findface-multi/
sudo docker compose restart
FindFace Nginx
Configure o Nginx do Findface (no servidor principal) para usar o SSL. Abra o arquivo de configuração em /opt/findface-multi/configs/findface-multi-ui/nginx-site.conf. Aplique as seguintes modificações no arquivo
- Adicione a nova seção server {...} que contem a regra de substituição. Na linha rewrite ^(.*) https://..., substitua ip_address_server_ffmulti pelo endereço de IP onde o FindFace esta instalado.
server {
listen 80;
server_name my-example-domain.com www.my-example-domain.com;
rewrite ^(.*) https://ip_address_server_ffmulti$1 permanent;
access_log off;
}
- Descomente as seguintes linhas na já existente seção server {...}
# listen 80 default_server;
# listen [::]:80 default_server;
- Adicione as seguintes linhas, incluindo os caminhos para o certificado e a chave. Adicione na já existente seção server{...}
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/my-example-domain.com.crt;
ssl_certificate_key /etc/nginx/ssl/my-example-domain.com.key;
Um exemplo de configuração do arquivo (/opt/findface-multi/configs/findface-multi-ui/nginx-site.conf) é mostrado abaixo:
Veja com atenção as mudanças realizadas e cheque com suas configurações
upstream ffsecurity {
server 127.0.0.1:8002;
}
upstream ffsecurity-ws {
server 127.0.0.1:8003;
}
upstream ffsecurity-django {
server 127.0.0.1:8004;
}
upstream audit {
server 127.0.0.1:8012;
}
upstream identity-provider {
server 127.0.0.1:8022;
}
map $http_upgrade $ffsec_upstream {
default "http://ffsecurity-ws";
"" "http://ffsecurity";
}
server {
listen 80;
server_name my-example-domain.com www.my-example-domain.com;
rewrite ^(.*) https://my-example-domain.com$1 permanent;
access_log off;
}
server {
# listen 80 default_server;
# listen [::]:80 default_server;
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/my-example-domain.com.crt;
ssl_certificate_key /etc/nginx/ssl/my-example-domain.com.key;
root /var/lib/findface-security;
autoindex off;
server_name _;
location = / {
alias /usr/share/findface-security-ui/;
try_files /index.html =404;
}
location /static/ {
}
location /uploads/ {
# internal; # uncomment if you intend to enable OVERPROTECT_MEDIA
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' '*';
add_header 'Access-Control-Allow-Headers' '*';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
add_header 'Access-Control-Max-Age' 2592000;
location ~ /card/(?<card_type>[a-zA-Z]+)/(?<card_id>[0-9]+)/attachments/(.*)$ {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' '*';
add_header 'Access-Control-Allow-Headers' '*';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
add_header 'Access-Control-Max-Age' 2592000;
add_header 'Content-Disposition' 'attachment';
add_header 'Content-Security-Policy' 'sandbox';
}
}
location /ui-static/ {
alias /usr/share/findface-security-ui/ui-static/;
}
location /doc/ {
alias /opt/findface-security/doc/;
}
location /api-docs {
alias /opt/findface-security/rapidoc;
index index.html;
}
location /api-docs/ {
alias /opt/findface-security/rapidoc/;
try_files $uri index.html =404;
}
location ~ /videos/(?<video_id>[0-9]+)/upload/(.*)$ {
client_max_body_size 15g;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://ffsecurity;
}
location @django {
internal;
client_max_body_size 1g;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_read_timeout 5m;
proxy_pass http://ffsecurity-django;
}
# location /v1/video-liveness {
# add_header Access-Control-Allow-Headers "*" always;
# add_header Access-Control-Allow-Methods "*" always;
# add_header Access-Control-Allow-Origin "*" always;
#
# if ($request_method = 'OPTIONS') {
# return 204;
# }
#
# client_max_body_size 300m;
# proxy_set_header Host $http_host;
# proxy_set_header X-Forwarded-For $remote_addr;
# proxy_set_header X-Forwarded-Proto $scheme;
# proxy_pass http://127.0.0.1:18301;
# proxy_read_timeout 5m;
# }
location / {
client_max_body_size 1g;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass $ffsec_upstream;
proxy_read_timeout 5m;
location ~ ^/(cameras|videos|vms|external-vms).*/stream/?$ {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://ffsecurity;
}
location ~ ^/streams/(.*)$ {
internal;
proxy_pass $1$is_args$args;
}
location /audit-logs {
proxy_pass http://audit;
}
location ~ ^/(auth|ad_groups|cproauth|groups|permissions|sessions|users|user-face|device-blacklist-records) {
proxy_pass http://identity-provider;
}
}
# location /users/me/ad {
#
# proxy_pass <FFmulti_address>/auth/ad_login/; e.g http://127.0.0.1/auth/ad_login/;
# proxy_method POST;
#
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header Host $http_host;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header Authorization $http_authorization;
# proxy_pass_header Authorization;
# proxy_no_cache 1;
# proxy_cache_bypass 1;
#
# auth_gss on;
# auth_gss_realm <REALM>; # e.g. TESTNTL.LOCAL;
# auth_gss_keytab <path/to/file.keytab>; # e.g. /var/lib/web.keytab
# auth_gss_service_name <service_name>; # e.g. HTTP/web.testntl.local;
# auth_gss_allow_basic_fallback on;
# }
}
4.Copie o arquivo genérico de configuração do Nginx chamado nginx.conf que esta dentro do container em um dos serviços do FindFace para sua máquina
sudo docker cp findface-multi-findface-multi-ui-1:/etc/nginx/nginx.conf /etc/nginx/nginx.conf
- No arquivo de configuração que acabamos de copiar (/etc/nginx/nginx.conf), ache a seção SSL Settings e adicione as seguintes linhas
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1h;
-
No arquivo /opt/findface-multi/docker-compose.yaml, monte, a pasta do SSL (/etc/nginx/ssl) e o arquivo de configuração que copiamos, no serviço findface-multi-findface-multi-ui-1
- Abra o docker compose
sudo vi /opt/findface-multi/docker-compose.yaml
- Localize o serviço findface-multi-ui e configure-o para que se pareça com o exemplo abaixo
findface-multi-ui: depends_on: [findface-multi-legacy] image: docker.int.ntl/ntech/multi/multi/ui:ffmulti-2.1.3 network_mode: service:pause restart: always volumes: ['./configs/findface-multi-ui/nginx- site.conf:/etc/nginx/conf.d/default.conf:ro', './data/findface-multi-legacy/uploads:/var/lib/findface-security/uploads','/etc/nginx/ssl:/etc/nginx/ssl', '/etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro']
- Abra o docker compose
Findface Multi Legacy
Edite o arquivo de configuração /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py
- No parametro ROUTER_URL e IMAGE_CROP_URL, substitua o http:// por https://
sudo vi /opt/findface-multi/configs/findface-multi-legacy/findface-multi-legacy.py
...
'ROUTER_URL': 'https://127.0.0.1',
'IMAGE_CROP_URL': 'https://127.0.0.1',
...
- Se você usa CA-certificate, especifique em ROUTER_URL o domínio no qual o certificado foi criado
'ROUTER_URL': 'https://my-example-domain.com'
- Adicione https://my-example-domain.com ao parametro EXTERNAL_ADDRESS
...
EXTERNAL_ADDRESS = 'https://my-example-domain.com'
...
- Adicione as seguintes linhas, no caso de uma configuração customizada e em que as fotos estão tendo problemas para recarregar na pagina do dominio
USE_X_FORWARDED_HOST = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
- Reinicie o FindFace
cd /opt/findface-multi
sudo docker-compose restart
Configure os hosts
- Abra o arquivo /etc/hosts/ no servidor onde o FindFace Multi esta instalado e adicione a seguinte linha
sudo vi /etc/hosts
127.0.0.1 my-example-domain.com
-
No sistema onde você usa um navegador para interagir com o FindFace Multi, navegue até o arquivo hosts. Adicione o endereço de IP do servidor que o findface está instalado no lugar de ip_address_server_ffmulti. Substitua my-example-domain.com com o seu nome de domínio.
- No linux
sh sudo vi /etc/hosts
conf *ip_address_server_ffmulti* my-example-domain.com
- No Windows, execute/pesquise C:\Windows\System32\drivers\etc\hosts como um administrador. E adicione a seguinte linha no arquivo hosts:
conf *ip_address_server_ffmulti* my-example-domain.com
- No linux
-
Reinicie o FindFace
cd /opt/findface-multi/
sudo docker-compose restart
Câmeras / Upload de Vídeo(Parte Web)
Se você usa o certificado auto gerenciado, desative das câmeras a verificação do SSL
- Navegue em Video Sources > Cameras ou Uploads
- Clique na câmera
- Na aba Advanced, desmarque a opção Verify the SSL certificate