要启用
HTTP公钥固定扩展,请按照以下步骤操作:,,1. 生成服务器的私钥和公钥。,2. 将公钥发送给客户端。,3. 在服务器上配置
HTTP公钥固定扩展。,4. 重启服务器以使更改生效。
HTTP公钥固定(Public Key Pinning Extension,HPKP)是一种安全功能,旨在降低使用伪造证书进行中间人攻击的风险,通过将特定加密公钥与Web服务器关联,可以确保浏览器仅接受预定义的公钥,从而增强网站的安全性。
什么是HTTP公钥固定?
1、定义:公钥固定是一种安全机制,它告诉Web客户端将特定加密公钥与某个Web服务器相关联,此机制通过在HTTP响应头中添加PublicKeyPins字段来实现。
2、作用:其主要作用是防止攻击者通过伪造证书来进行中间人攻击,即使攻击者能够破坏单个CA(证书颁发机构),也无法对启用了HPKP的TLS连接执行MITM攻击。
3、实现原理:当用户首次访问启用了HPKP的网站时,服务器会通过HTTP头告知客户端哪些公钥是合法的,客户端将这些信息存储在本地,并在后续访问时验证服务器提供的公钥是否匹配,如果发现不匹配,则向用户发出警告。
如何查看网站是否成功启动HPKP?
1、使用浏览器F12调试工具:可以通过浏览器的F12调试工具查看网站的网络请求头部,确认是否存在PublicKeyPins字段,在火狐浏览器中,如果看到“公钥固定:已禁用”,说明当前网站未启用HPKP。
如何在服务器上配置HPKP?
1、获取公钥指纹:需要从证书或密钥文件中提取公钥信息,并使用Base64编码,可以使用OpenSSL命令生成SPKI(主体公钥信息)指纹。
“`bash
openssl rsa in myrsakeyfile.key outform der pubout | openssl dgst sha256 binary | openssl enc base64
“`
2、配置Web服务器:根据使用的Web服务器类型,添加相应的配置指令以启用HPKP。
Apache:在Apache配置文件中添加以下行。
“`apache
Header always set PublicKeyPins "pinsha256="base64+primary=="; pinsha256="base64+backup=="; maxage=5184000; includeSubDomains"
“`
Nginx:在Nginx配置文件中添加以下行。
“`nginx
add_header PublicKeyPins ‘pinsha256="base64+primary=="; pinsha256="base64+backup=="; maxage=5184000; includeSubDomains’ always;
“`
Lighttpd:在Lighttpd配置文件中添加以下行。
“`lighttpd
setenvifexisting XServedBy "publickeypins" "pinsha256="base64+primary=="; pinsha256="base64+backup=="; maxage=5184000; includeSubDomains"
“`
3、设置maxage参数:maxage
参数定义了浏览器应记住公钥的时间(以秒为单位),通常设置为5184000秒(即60天),这是一个合理的时间限制。
4、includeSubDomains选项:如果指定了此可选参数,则此规则也适用于所有站点的子域。
5、reporturi选项:如果指定了此可选参数,则会将引脚验证失败报告给给定的URL。
“`apache
Header always set PublicKeyPins "pinsha256="base64+primary=="; pinsha256="base64+backup=="; maxage=5184000; includeSubDomains; reporturi="https://www.example.net/hpkpreport""
“`
常见问题解答(FAQs)
1、Q: 为什么需要启用HTTP公钥固定(HPKP)?
A: 启用HPKP可以有效防止中间人攻击(MITM),即使攻击者能够破坏单个CA,也无法对启用了HPKP的TLS连接执行MITM攻击,HPKP还能防止某些类型的证书滥用和伪造。
2、Q: 启用HPKP后如何验证其配置是否正确?
A: 可以通过浏览器的F12调试工具查看HTTP响应头,确认是否存在PublicKeyPins字段,如果配置正确,应该能看到相应的公钥指纹和其他参数。
启用HTTP公钥固定扩展(HPKP)是提高网站安全性的重要措施之一,通过正确配置和定期更新公钥,可以有效防止中间人攻击,保护用户数据的安全。
在服务器上启用HTTP公钥固定扩展(HPKP)教程
HTTP Public Key Pinning(HPKP)是一种安全特性,它允许网站管理员指定哪些预定义的公钥可以代表其网站,这样可以防止中间人攻击,确保用户通过HTTPS连接到他们预期的网站。
适用环境
已配置HTTPS的服务器
控制服务器配置的能力
前提条件
确保你的服务器支持HPKP
确保你有网站的公钥证书及其对应的中间证书链
操作步骤
1. 准备公钥信息
你需要从你的SSL/TLS证书中提取公钥信息,这通常可以通过查看证书中的“Subject Public Key Info”部分来完成。
2. 生成pinsha256值
使用以下命令生成公钥的SHA256值:
openssl x509 in fullchain.pem noout pubkey outform DER | openssl dgst sha256 out pinsha256.txt
3. 配置服务器
以下是在不同服务器上启用HPKP的配置步骤:
Apache
编辑你的.htaccess
文件或Apache配置文件(通常是httpd.conf
或ssl.conf
),添加以下行:
Header set PublicKeyPins "pinsha256=; maxage=; includeSubDomains"
f /path/to/pinsha256.txt
其中
是从步骤2中生成的值,
是以秒为单位的时间,例如31536000(1年),f
参数指定了公钥文件的位置。
Nginx
编辑你的Nginx配置文件,通常在server
块中添加以下行:
add_header PublicKeyPins 'pinsha256=; maxage=; includeSubDomains' always;
IIS
在IIS中,你需要在网站的“HTTP头”部分添加HPKP头部:
1、在IIS管理器中,选择你的网站。
2、点击“HTTP头”。
3、点击“添加”。
4、在“名称”框中输入PublicKeyPins
。
5、在“值”框中输入你的PIN值。
6、在“添加标志”部分,选择“始终使用”。
4. 验证配置
使用在线工具(如 [Qualys SSL Labs’ SSL Test](https://www.ssllabs.com/ssltest/analyze.html))来验证你的HPKP配置是否正确实施。
注意事项
确保maxage
值不要设置得太高,以防止未来的密钥泄露。
不要将所有的公钥都固定,只固定主要的网站公钥。
如果你使用多个证书(对于CDN),确保每个证书都有对应的PIN。
结束语
通过启用HTTP公钥固定扩展(HPKP),你可以增强你网站的安全性,防止中间人攻击,请确保按照上述步骤正确配置,并定期检查你的配置以确保其有效性。