Как игнорировать предупреждение ssl-сертификата или передавать самоподписанный сертификат (изнутри файла grunt) во время автоматизации доступности?

Я использую плагины grunt-accessibility для автоматизации отчетов для ошибок accessibility. Он нормально работает нормально, но когда я пытаюсь его на сайте с self signed certificate (вид, который показывает страницу interim с некоторым предупреждением о безопасности сертификата и ссылку, чтобы продолжить сайт, если вы все еще хотите), он сообщает об ошибке на этой странице interim, которая, конечно же, является пустой страницей:

<html>
    <head></head>
    <body></body>
</html>

Очевидно, что я хочу обойти эту промежуточную страницу и запустить accessibility на фактической странице.

Что я пытался?

Я попробовал следующее (найденное из googling и других SO's Q & A):

  • Печально известный хак

    npm set strict-ssl false
    
  • Добавление импортированного пути сертификации

    npm config set cafile="C:\path\to\cert.cer"
    
  • Добавление process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" (см. ниже Grunfile)

Из того, что я собираю, grunt-accessibility использует AccessSniff, который, в свою очередь, использует phantomjs. Теперь phantomjs имеет опции для игнорирования таких предупреждений

--ignore-ssl-errors=[true|false] игнорирует ошибки SSL, такие как истекшие или самозаверяющие ошибки сертификата (по умолчанию - false).

Выше указаны параметры CLI, которые я не могу передать из Grunfile.js. Может кто-то помочь мне решить или предложить другой подход к проблеме.

Это мой Gruntfile.js:

module.exports = grunt => {
  process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

  grunt.initConfig({
    phantomjs: {
      // default: {
        options: {
          "ignore-ssl-errors": true,
          // tested here with different instructions as per comments 
          // below from users on this site, such as
          // "--ignore-ssl-errors": true (-- hyphen)
          // "ignore-ssl-errors": "true" ("true" as string)
          "ssl-protocol": "any",
          "ssl-certificates-path": "C:/path/to/cert.cer"
        }
      // }
    },
    accessibility: {
      options: {
        force: true,
        accessibilityLevel: 'WCAG2AAA',
        browser: true // tested with both true/false, i.e. opt for phantomjs/jsDom
      },
      test: {
        options: {
          urls: ['https://self-signed.badssl.com/']
        },
        src: ['example/test.html']
      }
    }
  });

  grunt.loadNpmTasks('grunt-accessibility');
  grunt.registerTask('default', ['accessibility']);
};

P.S.:

  • test url - это самоподписанный ssl-сайт, поэтому вы можете скопировать/вставить вышеуказанный код и протестировать его

  • только зависимости в package.json

    "devDependencies": {
        "grunt": "^1.0.1",
        "grunt-accessibility": "^5.0.0"
    }
    
  • node версия v.8.9.0

Ответ 1

Я не думаю, что вы можете напрямую повлиять на то, как PhantomJS вызывается из другого плагина Grunt в вашем собственном файле Grunt.

Если я не ошибаюсь, единственное решение - либо зафиксировать изменение в пакете доступности доступа, который передает опцию ignore-ssl-errors (в параметрах, которые вы передаете для доступа к хрунтовому доступу) вверх по течению до PhantomJS; или перехватить вызов PhantomJS и ввести параметр ignore-ssl-errors.

Я думаю, что второе решение будет самым быстрым и наиболее целесообразным. Вам придется либо вручную изменить точку входа (либо node_modules/.bin/phantomjs, либо node_modules/phantomjs/index.js), либо написать предварительный запуск script, который изменит его. В модифицированном файле .js вы должны ввести ignore-ssl-errors, добавив код в верхнюю часть файла, который добавляет его в массив process.argv:

process.argv.push("--ignore-ssl-errors=true");

Ответ 2

Я всегда использую команду strict-ssl, но с небольшой разницей.

Попробуйте вставить конфигурацию в свою команду

Будет npm config set strict-ssl false

Надеюсь, что это поможет вам.