it-roy-ru.com

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

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

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

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

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

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

  1. Печально известный взломать

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

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

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

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

Выше приведены параметры интерфейса командной строки, которые я не могу передать из 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 .: 

  • uRL-адрес теста - это самозаверяющий ssl-сайт, поэтому вы можете скопировать/вставить приведенный выше код и протестировать его.

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

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

11
n4m31ess_c0d3r

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

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

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

process.argv.Push("--ignore-ssl-errors=true");
2
Roy Tinker

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

Попробуйте вставить config в вашу команду

Там будет как npm config set strict-ssl false

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

0
Fernando Paz