Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于启用HPKP的Tomcat筛选器_Java_Security_Tomcat_Https_Http Headers - Fatal编程技术网

Java 用于启用HPKP的Tomcat筛选器

Java 用于启用HPKP的Tomcat筛选器,java,security,tomcat,https,http-headers,Java,Security,Tomcat,Https,Http Headers,我正在尝试在应用程序的tomcat服务器中启用HPKP证书固定。我添加了一个过滤器以包括HSTS和HPKP指令。我在响应头中获得了预期的HSTS和HPKP指令 但即使在我更改服务器中的证书或拦截请求并发送假证书之后,浏览器也不会停止请求。浏览器支持HPKP,因为当请求被截获并提供假证书时,它会阻止其他支持HPKP的站点,如facebook 只是想知道我生成公钥散列的方式是否有问题,因此浏览器没有锁定密钥?如果有人为tomcat启用了HPKP,有什么反馈吗 在web.xml中添加了筛选器

我正在尝试在应用程序的tomcat服务器中启用HPKP证书固定。我添加了一个过滤器以包括HSTS和HPKP指令。我在响应头中获得了预期的HSTS和HPKP指令

但即使在我更改服务器中的证书或拦截请求并发送假证书之后,浏览器也不会停止请求。浏览器支持HPKP,因为当请求被截获并提供假证书时,它会阻止其他支持HPKP的站点,如facebook

只是想知道我生成公钥散列的方式是否有问题,因此浏览器没有锁定密钥?如果有人为tomcat启用了HPKP,有什么反馈吗

在web.xml中添加了筛选器

    <filter>
            <filter-name>HttpsSecFilter</filter-name>
            <filter-class>com.x.x.x.x.x.HttpsSecurityFilter</filter-class>
    </filter>
    <filter-mapping>
            <filter-name>HttpsSecFilter</filter-name>
            <url-pattern>..[url-pattern]..</url-pattern>
    </filter-mapping>
来自响应头的指令

Public-Key-Pins:pin-sha256="JdZ3itf02UwsCav0X26wcSQLGfo="; max-age=5184000
Strict-Transport-Security:max-age=5184000
尝试更新/etc/apache2/sites enabled/website.conf 或/etc/apache2/httpd.conf


HTTP HPKP的公钥锁定扩展是一种安全功能,它告诉web客户端将特定的加密公钥与某个web服务器关联,以降低使用伪造证书进行MITM攻击的风险

不幸的是,ApacheTomcat不支持HPKP过滤器。因此,我们必须编写自己的“全局过滤器”,即阀门。 首先,您需要从证书或密钥文件中提取公钥信息,并使用Base64对其进行编码。 以下命令将帮助您从密钥文件、证书签名请求或证书中提取Base64编码信息

openssl rsa -in my-rsa-key-file.key -outform der -pubout | openssl dgst -sha256 -binary | openssl enc -base64

openssl ec -in my-ecc-key-file.key -outform der -pubout | openssl dgst -sha256 -binary | openssl enc -base64

openssl req -in my-signing-request.csr -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64

openssl x509 -in my-certificate.crt -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
以下命令将提取网站的Base64编码信息

openssl s_client -servername www.example.com -connect www.example.com:443 | openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
HPKP头示例

Public-Key-Pins: 
  pin-sha256="cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs="; 
  pin-sha256="M8HztCzM3elUxkcjR2S5P4hhyBNf6lHkmjAHKhpGPWE="; 
  max-age=5184000; includeSubDomains; 
  report-uri="https://www.example.org/hpkp-report"
在本例中,pin-sha256=cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs=pins用于生产的服务器公钥。第二个pin声明pin-sha256=m8hztczmm3eluxkcjr2s5p4hybnf6lhkmjahkhpgpwe=也会锁定备用钥匙。max age=5184000告诉客户将此信息存储两个月,根据IETF RFC,这是一个合理的时间限制。该键固定也适用于所有子域,这是由includeSubDomains声明告知的。最后,报告uri=https://www.example.net/hpkp-report 说明报告pin验证失败的位置。 现在创建一个阀门,如下所述。 创建一个Maven Java应用程序。 添加以下依赖项:

<dependency>  
<groupId>org.apache.tomcat</groupId> 
<artifactId>catalina</artifactId>    
<version>6.0.53</version>    
<scope>provided</scope>
</dependency>
构建你的library.jar文件

复制${tomcat.home}/lib目录中的jar文件。 配置server.xml以使用新阀。例如: 启动服务器以查看新阀的运行情况
谢谢大家!

他要的是tomcat而不是apache2
Public-Key-Pins: 
  pin-sha256="cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs="; 
  pin-sha256="M8HztCzM3elUxkcjR2S5P4hhyBNf6lHkmjAHKhpGPWE="; 
  max-age=5184000; includeSubDomains; 
  report-uri="https://www.example.org/hpkp-report"
<dependency>  
<groupId>org.apache.tomcat</groupId> 
<artifactId>catalina</artifactId>    
<version>6.0.53</version>    
<scope>provided</scope>
</dependency>
public class GlobalFilterValve extends ValveBase {

    @Override
    public void invoke(Request request, Response response) throws IOException, ServletException {
    response.setHeader("Public-Key-Pins", "pin-sha256=\"cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs=\"; pin-sha256=\"M8HztCzM3elUxkcjR2S5P4hhyBNf6lHkmjAHKhpGPWE=\"; max-age=5184000; includeSubDomains");               
    getNext().invoke(request, response);
    }

}
<valve className="org.devan.GlobalFilterValve"/>