Ответы пользователя по тегу Цифровые сертификаты
  • Cамоподписанный сертификат SSL добавить в список доверенных в браузере?

    @dronmaxman
    VoIP Administrator
    BertiK0_0, Для соблюдения доверия необходимо несколько придерживаться нескольких правил.
    1) Должна быть валидна дата окончания сертификата, у ключа нет срока действия, только у сертификата.
    2) Уровень шифрование не ниже SHA256
    3) Длина ключа не меньше 2048 bits.
    4) CN в сертификате должен совпадать с доменным именем, можно указать несколько CN (alternative name) в том числе IP.
    5) Использовать необходимо 443 порт
    6) В системе или браузере должен быть установлен рутовый сертификат, ключем которого был подписан сертификат сервера.

    Сертификат устанавливается в систему кроме некоторорых исключений (firefox), все популярые ОС имеют встроенный инструмент для установки сертификата (double click). Скрок действия сертификат может быть 10 и 30 лет, не критично, но некоторым браузерм не нравятся сертификаты со сроком жизни более 2х лет.
    Не стоит сразу поднимать подключение с сертификатом. Пусть пользователь после установки ПО зайдет на 80 порт, и укажет необхимые параметры сертификата (доменное имя и срок службы), скачает рутовый сертификат и после этого сервер активирует редирект на 443 порт.

    В некоторых организациях есть свой центр сертификации, можно запросить сертификат у них, ПК в домене будут автоматически подтягивать сертификат рута с сервера сертификации и доверять твоему серверу. Соответственно так же стоит предусмотреть механизм импорта стороннего сертификата на твой сервер.

    Посмотри как это делают другие, например PfSence, Fortigate, они из коротби тоже идут с самоподписанными сертификатами и предлагают скачать и установить свой рут.
    Ответ написан
  • Сбербанк говорит: сертификат прикреплён некорректно. Почему?

    @dronmaxman
    VoIP Administrator
    curl_setopt( $ch, CURLOPT_SSLCERT, 'https://interotkos.ru/admin/SSL/certificate_fbb854...' );

    Following store locations are supported: CurrentUser, LocalMachine, CurrentService, Services, CurrentUserGroupPolicy, LocalMachineGroupPolicy, LocalMachineEnterprise.

    certificate_fbb85415-7416-4a5d-aa54-93321dc2306d.p12

    Schannel also support P12 certificate file, with the string P12 specified with CURLOPT_SSLCERTTYPE.

    https://curl.se/libcurl/c/CURLOPT_SSLCERT.html
    Ответ написан
  • Как сделать домен с SSL вместо IP для WG-Easy (реп. DigneZzZ/dwg)?

    @dronmaxman
    VoIP Administrator
    Не забудь поменять MYEMAIL@gmail.com на свой.
    version: "3"
    services:
      traefik:
        image: "traefik:v2.10"
        container_name: "traefik"
        command:
          #- "--log.level=DEBUG"
          - "--api.insecure=true"
          - "--providers.docker=true"
          - "--providers.docker.exposedbydefault=false"
          - "--entrypoints.web.address=:80"
          - "--entrypoints.websecure.address=:443"
          - "--certificatesresolvers.myresolver.acme.httpchallenge=true"
          - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
          #- "--certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
          - "--certificatesresolvers.myresolver.acme.email=MYEMAIL@gmail.com"
          - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
        ports:
          - "80:80"
          - "443:443"
    #      - "8080:8080"
        volumes:
          - "./letsencrypt:/letsencrypt"
          - "/var/run/docker.sock:/var/run/docker.sock:ro"
        networks:
          private_network:
            ipv4_address: 10.2.0.120
    
      unbound:
        image: "mvance/unbound:1.17.0"
        container_name: unbound
        restart: unless-stopped
        hostname: "unbound"
        volumes:
          - "./unbound:/opt/unbound/etc/unbound/"
        networks:
          private_network:
            ipv4_address: 10.2.0.200
    
      wg-easy:
        depends_on: [unbound, adguardhome]
        environment:
          - WG_HOST=MYHOST_IP
          - PASSWORD=openode
          - WG_PORT=51820
          - WG_DEFAULT_ADDRESS=10.10.10.x
          - WG_DEFAULT_DNS=10.2.0.100
          - WG_ALLOWED_IPS=10.2.0.0/24, 0.0.0.0/0, ::/0
          - WG_PERSISTENT_KEEPALIVE=25
          - WG_MTU=1280
        #image: ditek/wg-easy
        image: weejewel/wg-easy
        container_name: wg-easy
        volumes:
          - .:/etc/wireguard
        ports:
          - "51820:51820/udp"
    #      - "51821:51821/tcp"
        restart: unless-stopped
        cap_add:
          - NET_ADMIN
          - SYS_MODULE
        sysctls:
          - net.ipv4.ip_forward=1
          - net.ipv4.conf.all.src_valid_mark=1
        dns:
          - 10.2.0.100
          - 10.2.0.200
        networks:
          private_network:
            ipv4_address: 10.2.0.3
        labels:
          - "traefik.enable=true"
          - "traefik.http.routers.vpn.rule=Host(`vpn.site.com`)"
          - "traefik.http.routers.vpn.entrypoints=websecure"
          - 'traefik.http.routers.vpn.tls=true'
          - "traefik.http.routers.vpn.tls.certresolver=myresolver"
          - "traefik.http.services.vpn.loadbalancer.server.port=51821"
    
      adguardhome:
        depends_on: [unbound]
        image: adguard/adguardhome
        container_name: adguardhome
        restart: unless-stopped
        environment:
          - TZ=America/Los_Angeles
        volumes:
          - ./work:/opt/adguardhome/work
          - ./conf:/opt/adguardhome/conf
        networks:
          private_network:
            ipv4_address: 10.2.0.100
    
    networks:
      private_network:
        ipam:
          driver: default
          config:
            - subnet: 10.2.0.0/24
    Ответ написан
  • Из-за роутера (mikrotik) не открываются сайты, как исправить?

    @dronmaxman
    VoIP Administrator
    В теории твой роутер могли взломать, но это легко проверить если подключить пк к интернет на прямую минуя роутер. Скорее всего провайдер модифицирует начало tls сессии что бы исключить tls 1.3. Возможно провайдер так блокирует ресурсы которые попали в не милость.
    Ответ написан
    Комментировать
  • Как запустить сразу два сервера в nginx?

    @dronmaxman
    VoIP Administrator
    sovok2, Если там реально websocket то nginx рекомендует делать через upstream
    https://www.nginx.com/blog/websocket-nginx/

    Если сайт находится на том же сервере, то почему бы не сделать вот так, зачем использовать sub домены? У тебя сертификат wildcard ?

    http {
        map $http_upgrade $connection_upgrade {
            default upgrade;
            '' close;
        }
     
        upstream websocket {
            server 0.0.0.0:8831;
        }
    }
    
    server {  
       listen 443 ssl;
       ssl_certificate /etc/ssl/nginx/syn-q.ru.crt;
       ssl_certificate_key /etc/ssl/nginx/syn-q.ru.key;
       server_name syqq.ru;
      
       location /websocket { 
         proxy_pass         http://websocket;
         proxy_http_version 1.1;
         proxy_set_header   Upgrade $http_upgrade;
         proxy_set_header   Connection "upgrade";
         proxy_set_header   Host $host;
       }
    
         location /auth { 
         proxy_set_header        X-Real-IP        $remote_addr; 
         proxy_set_header        X-Forwarded-For  $proxy_add_x_forwarded_for; 
         proxy_set_header        Host $host; 
        
         proxy_pass         http://localhost:3000; 
        }
     }
    Ответ написан
  • Почему не работает certbot?

    @dronmaxman
    VoIP Administrator
    sudo mkdir -p /var/www/cert_bot/.well-known/acme-challenge
    sudo chown -R www-data:www-data /var/www/cert_bot

    server {
        listen 80;
        listen [::]:80;
        server_name git.mydomain.com;
    root /var/www/cert_bot;
    
            location /.well-known/acme-challenge/ {
                    access_log off;
                    default_type "text/plain";
            }  
        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass http://localhost:8091;
        }
    }

    sudo certbot certonly --webroot --agree-tos --email user@gmail.com  -w /var/www/cert_bot/  -d git.mydomain.com


    После получение сертификата - добавь секцию с https
    server {
        listen [::]:443 ssl ipv6only=on; 
        server_name git.mydomain.com;
     
        ssl_certificate /etc/letsencrypt/live/git.mydomain.com/fullchain.pem; 
        ssl_certificate_key /etc/letsencrypt/live/git.mydomain.com/privkey.pem; 
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; 
    
        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_pass http://localhost:8091;
        }
    
       
    }
    Ответ написан
  • Как настроить SSL сертификат на нескольких серверах, имея лишь одно доменное имя?

    @dronmaxman
    VoIP Administrator
    Для WEB сервисов можно использовать Lets'Encrypt и субдомены. Для подключения ДБ, лучше использовать самоподписанный с длинным сроком годности (2 года и более) либо можно использовать VPN.
    Ответ написан
    Комментировать
  • Как расшифровать подписанный хэш файла публичным ключем как при верификации?

    @dronmaxman
    VoIP Administrator
    сначала расшифровывает файл "sign.sha256" публичным ключем

    Публичный ключь используется для шифрования. Приватный ключь используется для расшифровки и создания подписи.

    openssl dgst -sha256 -verify public.pem -signature sign.sha256 plaintext.txt

    Для уточнения, процесс проверки цифровой подписи с использованием публичного ключа состоит из следующих шагов:

    1. Получатель вычисляет хеш-значение документа, используя хеш-функцию, например, SHA-256, и получает хеш (hash_document).
    2. Получатель использует публичный ключ отправителя для применения определенной криптографической операции к цифровой подписи, не декодируя или расшифровывая ее. Обычно используется операция, такая как RSA-верификация подписи.
    3. В результате применения операции получается определенное значение, которое сравнивается с хеш-значением документа (hash_document). Если значения совпадают, то подпись считается верной.

    Важно понимать, что публичный ключ используется для верификации, а не для расшифровки подписи.
    Ответ написан
    Комментировать
  • Почему Certbot не находит плагин под NGINX?

    @dronmaxman
    VoIP Administrator
    В 16.04 нет пакета python-certbot-nginx поэтому все делаем руками.

    ## Ставим CertBot
    sudo apt-get install certbot
    
    ## Создаем папку
    sudo mkdir -p /var/www/cert_bot/.well-known/acme-challenge
    sudo chown -R www-data:www-data /var/www/cert_bot
    
    ## Создаем базовый конфиг в /etc/nginx/site-enable/default 
    server {
              listen  80;
              
              server_name  _;
            root /var/www/cert_bot;
    
            location /.well-known/acme-challenge/ {
                    access_log off;
                    default_type "text/plain";
            }
            location / {
                    return 301 https://$server_name$request_uri;
                    }
    }
    
    ## Пробуем запросить сертификат
    sudo certbot certonly --dry-run--webroot --agree-tos --email hostmaster@domain.com -w /var/www/cert_bot/ -d domain.com 
    
    ## Если все ок, заправиваем без --dry-run
    sudo certbot certonly --webroot --agree-tos --email hostmaster@domain.com -w /var/www/cert_bot/ -d domain.com 
    
    ## Добавляем конфиг с SSL /etc/nginx/site-enable/domain-ssl
    server {
            listen   443 ssl;
           
            server_name domain.com;
            
    
            ssl                  on;
            ssl_stapling on;
            ssl_stapling_verify on;
            ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
            ssl_certificate_key /etc/letsencrypt/domain.com/privkey.pem;
            #ssl_dhparam /etc/nginx/dhparam.pem;
    
            root /var/www/html
    }
    
    ## Добавляем в крон автообновление сертификата 
    sudo crontab -e -u root
    0 0 10,25 * * certbot renew
    Ответ написан
    Комментировать
  • Как исправить эти ошибки nextcloud, NGINX?

    @dronmaxman
    VoIP Administrator
    Попробуй добавить в /var/www/nextcloud/config/config.php
    'overwriteprotocol' => 'https',

    NGINX PROXY MANAGER - Advanced - Custom nginx configuration
    Strict-Transport-Security "max-age = 31536000; includeSubDomains" always;
    Ответ написан
  • Как настроить сертификат CF для поддомена на Oracle Cloud?

    @dronmaxman
    VoIP Administrator
    Проблемка была в Firewall

    После вот этого остальные правила не отрабатывают
    629 39390 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

    и это правило соответственно тоже
    443 ALLOW Anywhere
    Ответ написан
    Комментировать
  • Почему контейнер не видит SSL-сертификат?

    @dronmaxman
    VoIP Administrator
    Рабочий пример.

    app.run(host='0.0.0.0', port=8095, debug=False)
    
    
    services:
      app:
        command: python wsgi_docker.py
    nginx:
        volumes:
          - ./file_setting/fullchain.pem:/etc/nginx/fullchain.pem
          - ./file_setting/privkey.pem:/etc/nginx/privkey.pem
        build: ./nginx
        container_name: t_nginx
        restart: always
        ports:
            - 80:95
            - 443:96
        depends_on:
          - app
    
    
    server {
        listen 95;
        server_name my_domain.ru www.my_domain.ru;
        return 301 https://$host$request_uri;
    }
    server {
        listen 96 ssl;
        server_name my_domain.ru www.my_domain.ru;
    
        ssl_certificate fullchain.pem;
        ssl_certificate_key privkey.pem;
        location / {
            proxy_pass "http://app:8095/";
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
        }
    }


    > Получается, что нельзя на одном домене поднять несколько докеров с SSL(раз 443 дам 1му докеру)?
    Архитектура такая. Тебе нужен nginx, не важно как он будет запущен (docker или localhost), nginx будет держать сертификат и слушать порты 80 и 443. Т.к. у тебя домен один и порт тоже, то трафик надо рулить url.

    services:
      app1:
        command: python wsgi_docker.py
     app2:
        command: python wsgi_docker.py
     app3:
        command: python wsgi_docker.py
       nginx:
          ports:
            - 80:95
            - 443:96
         
    server {
        listen 96 ssl;
         server_name my_domain.ru www.my_domain.ru;
       
        ssl_certificate fullchain.pem;
        ssl_certificate_key privkey.pem;
    
    location /app1 {
            proxy_pass "http://app1:8095/";
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
        }
    location /app2 {
            proxy_pass "http://app2:8095/";
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
        }
    location /app3 {
            proxy_pass "http://app3:8095/";
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
        }
    }


    Стучаться соответственно на

    https://domain.ru/app1
    https://domain.ru/app2
    https://domain.ru/app3
    Ответ написан
    Комментировать
  • Как заставить chrome доверять сертификату?

    @dronmaxman
    VoIP Administrator
    Необходимо
    - сгенерировать сертификат
    - указать справильный CN,
    - добавить IP и domainname(CN) в hosts
    - добавить сертификат в доверенный (macOS - keychain, windows - certmgr.msc)
    - зайти на сайт по domainname

    openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
      -keyout example.key -out example.crt -subj "/CN=myawsdomain.com" \
      -addext "subjectAltName=DNS:www.myawsdomain.com,DNS:myawsdomain.com,IP:10.11.10.11"
    Ответ написан
  • Как найти SSL сертификат на сервере Windows Server 2019?

    @dronmaxman
    VoIP Administrator
    Если это сертификат сервера, открываете Win+R набираете mmc и добавляете оснастку Certificate, для Local PC. Сертификаты для IIS обычно лежат в Personal.
    Ответ написан
    6 комментариев
  • Почему на одном веб-сайте спрашивает разрешение на установку сертификата?

    @dronmaxman
    VoIP Administrator
    Я вас расстрою. Но сертификат FindMyPhone уже стоит на вашем телефоне.

    Там же написано черным по английски.
    Приложение Опера запросило сертификат. Выберите сертификат который позволит приложению идентифицироваться на сервере сейчас и в будущем.

    Сам сертификат к вас скорее всего попал с установкой программы) FindMyPhone)
    Ответ написан
    6 комментариев
  • Сайт не открывается. TLS. В чем проблема?

    @dronmaxman
    VoIP Administrator
    Судя из дампа, до сервера не доходят пакеты или сервер отбрасывает ваш пакет. Возможно пакет дробиться, TLS не любит фрагментацию.
    Сравните MTU на своем провайдере и на теле2.

    https://help.keenetic.com/hc/ru/articles/214470885...

    https://networkdirection.net/https-fragmentation-a...

    Данные, подлежащие отправке, на уровне TCP представляются потоком байт, где каждый байт последовательно пронумерован. TCP делит поток на части — сегменты — и передает их на более низкий (сетевой) уровень для отправки получателю. В заголовке сегмента указывается его номер (Sequence number, Seq) — номер первого байта сегмента в общем потоке.
    Получатель принимает сегменты и собирает из них исходный непрерывный поток байт, отправляет подтверждения.
    В заголовке указывает номер подтверждения (Acknowledgment number, Ack) — порядковый номер следующего сегмента, ожидаемого от отправителя. Значение Ack означает, что вся непрерывная последовательность байт с первого до Ack-1 приняты успешно. Согласно спецификации, подтверждение для каждого сегмента не требуется. Одно подтверждение может отправляться сразу на несколько полученных сегментов.
    Ответ написан
    1 комментарий