Chrome会忽略扩展程序中的证书固定

时间:2016-09-26 21:41:25

标签: javascript google-chrome-extension

我正在创建一个安全的Chrome扩展程序,它应该安全地连接到我不拥有的外部https网址,并且不会使用自己的证书固定。使用HPKP,我想在浏览器扩展中固定证书以验证主机是否合法。

我做了一些研究,声称除了not possible之外,这是calling chrome via command line。很难找到关于镀铬(扩展)的HKPK的很多信息

使用webRequest& webRequestBlocking权限我试图拦截响应头。理论上说,如果我能将HPKP标头添加到响应标头,我可以模拟浏览器过滤来自此标头的未来流量。我使用下面的代码执行此操作。

chrome.webRequest.onHeadersReceived.addListener(function(details) {
    //86400 = 1 day to prevent lockout on missing update
    var addHeader = [
        {name:"Public-Key-Pins", value:'max-age=30; pin-sha256="+sCGKoPvhK0bw4OcPAnWL7QYsM5wMe/mn1t8VYqY9mM="; pin-sha256="bumevWtKeyHRNs7ZXbyqVVVcbifEL8iDjAzPyQ60tBE="'},
        {name:"Strict-Transport-Security", value:"max-age=86400"}
    ];

    for(var i=0;i<details.responseHeaders;i++) {
        var existHeader = details.responseHeaders[i];
        for(var o=0;o<addHeader.length;o++) {
            var writeHeader = addHeader[o];
            if(existHeader.name.toLowerCase() == writeHeader.name.toLowerCase()) {
                details.responseHeaders[i].value = writeHeader.value;
                addHeader[o].written = true;
            }
        }
    }

    for(var i=0;i<addHeader.length;i++) {
        var writeHeader = addHeader[i];
        if(!writeHeader.hasOwnProperty("written")) details.responseHeaders.push({name:writeHeader.name, value:writeHeader.value});
    }

    return {responseHeaders: details.responseHeaders};
}, {urls: ["<all_urls>"]}, ["blocking","responseHeaders"]);

chrome.webRequest.onResponseStarted.addListener(function(details) {
    console.log(details);
}, {urls: ["<all_urls>"]}, ["responseHeaders"]);

SHA256哈希是在线发现的随机证书,当我打电话给网站时,我希望浏览器阻止请求,只要它是一个https网址(因为RFC忽略了http网址)。遗憾的是,没有任何事情发生,但控制台返回数据确实附加了。

我的问题是:我在其他地方做错了什么,或者是否有其他方法让我的浏览器扩展程序验证其与正确的主机的对话?

0 个答案:

没有答案