Как игнорировать предупреждение 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
Надеюсь, что это поможет вам.