Как декодировать тему X.509 (из клиентских сертификатов) в NodeJS - PullRequest
0 голосов
/ 15 апреля 2019

Вопрос : Как мне декодировать субъектные данные X.509 из строки сертификата в NodeJS?

Фон

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

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    ssl on;
    ssl_certificate        /path/to/bundle.crt;
    ssl_certificate_key    /path/to/server.key;
    ssl_client_certificate /path/to/client_certificates.crt;
    ssl_verify_client      optional_no_ca;
    ssl_verify_depth       2;

    ssl_protocols TLSv1.1 TLSv1.2;
    ssl_session_cache shared:SSL:20m;
    ssl_session_timeout 60m;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DHE+AES128:!ADH:!AECDH:!MD5';

    server_name some_server;
    root /path/to/www;

    location /api/ {
        proxy_pass         http://my_api_server:1234/;
        proxy_http_version 1.1;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
        proxy_set_header   X-SSL-CERT $ssl_client_escaped_cert;
    }
}

Теперь это заполняет заголовок, чтобы я мог получить сертификат в заголовке:

let cert = req.headers['x-ssl-cert'];
cert = decodeURI(cert);
const interestingStuff = x509.getSubject(cert);

Теперь, к сожалению, пакет x509 , похоже, не позволяет cert быть строкой, или я совершаю какую-то ошибку. Произошла ошибка: Error: Context creation failed: File doesn't exist.: 233123-123123-123123.

Подсказка

Этот выпуск намекает на то, что ему нужно иметь правильные символы новой строки, но при запуске JSON.stringify выглядит нормально: "-----BEGIN CERTIFICATE-----\nASDWQESAD..\n..ASDASD\n-----END CERTIFICATE-----\n"

Другие вещи

Примечание : это просто в простом NodeJS, когда не используется прокси-сервер и непосредственно настраивается ca в https, так как getPeerCertificate () возвращает объект с subject элемент.

Этот вопрос частично связан с: настройкой expressjs tls connect https nginx server для запроса

1 Ответ

0 голосов
/ 15 апреля 2019

Виновным кажется decodeURI.Самый очевидный намек заключался в том, что каждая строка в сертификате должна иметь одинаковую максимальную длину, 64 символа.Использование decodeURIComponent решило эту проблему.

Возможно, также полезно инкапсулировать decodeURIComponent в оператор try-catch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...