什么是证书攻击,为什么要防御?
证书攻击是指攻击者通过穷举IP地址的方式,获取证书信息来找寻需要攻击的网站。
此举可以无视通常的源站隐藏手段,直接攻击网站的服务器。
如何防御?
生成一个伪造的证书:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #!/bin/bash
SCRIPT_DIR=$(dirname "$0")
COMMON_NAME="your_domain.com" VALID_DAYS=365
openssl genpkey -algorithm RSA -out "$SCRIPT_DIR/private.key"
openssl req -new -key "$SCRIPT_DIR/private.key" -out "$SCRIPT_DIR/certificate.csr" -config "$SCRIPT_DIR/openssl.cnf" -subj "/CN=$COMMON_NAME"
openssl x509 -req -days $VALID_DAYS -in "$SCRIPT_DIR/certificate.csr" -signkey "$SCRIPT_DIR/private.key" -out "$SCRIPT_DIR/certificate.crt"
cat "$SCRIPT_DIR/private.key" "$SCRIPT_DIR/certificate.crt" > "$SCRIPT_DIR/combined.pem"
chmod 600 "$SCRIPT_DIR/private.key" "$SCRIPT_DIR/certificate.crt" "$SCRIPT_DIR/combined.pem"
echo "Certificate and private key generated successfully."
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$CommonName = "your_domain.com" $ValidDays = 365
openssl genpkey -algorithm RSA -out "$ScriptDir/private.key"
openssl req -new -key "$ScriptDir/private.key" -out "$ScriptDir/certificate.csr" -config "$ScriptDir/openssl.cnf" -subj "/CN=$CommonName"
openssl x509 -req -days $ValidDays -in "$ScriptDir/certificate.csr" -signkey "$ScriptDir/private.key" -out "$ScriptDir/certificate.crt"
Get-Content "$ScriptDir/private.key", "$ScriptDir/certificate.crt" | Out-File "$ScriptDir/combined.pem"
Get-Item "$ScriptDir/private.key", "$ScriptDir/certificate.crt", "$ScriptDir/combined.pem" | ForEach-Object { $_.Attributes = 'Archive' }
Write-Host "Certificate and private key generated successfully."
|
openssl.cnf文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| [ req ] distinguished_name = req_distinguished_name x509_extensions = v3_ca prompt = no
[ req_distinguished_name ] C = CN ST = BEIJING L = Tongzhou O = TEST OU = IT CN = YOUR_COMMON_NAME
[ v3_ca ] basicConstraints = critical,CA:TRUE subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer
|
最后应用证书:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| server { listen 80 default_server; listen [::]:80 default_server;
return 444; }
server { listen 443 ssl default_server; listen [::]:443 ssl default_server; ssl_certificate /ssl/else/certificate.crt; ssl_certificate_key /ssl/else/private.key; return 444; }
|
最后效果:
