Win+R
)中输入inetmgr
,然后按回车键。https
。所有未分配
,这样无论客户端通过哪个IP地址访问,都能使用该证书。如果你的服务器有多个IP地址,并且你只想在某个特定IP上启用HTTPS,可以选择对应的IP地址。443
。这是HTTPS服务的默认端口号。如果你有特殊需求,也可以使用其他端口号,但客户端访问时需要明确指定端口号。https://<你的服务器IP或域名>
。由于这是一个自签名证书,浏览器会弹出安全警告,提示证书不受信任。你可以点击“高级”选项,然后选择“继续前往<你的服务器IP或域名>(不安全)”,以查看网站是否能够通过HTTPS正常访问。sudo apt update
sudo apt install openssl
sudo yum install openssl
sudo mkdir -p /etc/nginx/ssl
cd /etc/nginx/ssl
sudo openssl genrsa -out server.key 2048
server.key
是私钥文件的名称,你可以根据需要修改文件名。2048
表示密钥长度为2048位,这是目前推荐的安全长度。你也可以选择更高(如3072位或4096位),但会增加计算开销。生成自签名证书时,需要填写一些信息,这些信息将嵌入到证书中。运行以下命令:
sudo openssl req -new -x509 -days 365 -key server.key -out server.crt
-new
:表示生成一个新的证书签名请求(CSR)。-x509
:表示直接生成自签名证书,而不是生成CSR等待CA签名。-days 365
:表示证书的有效期为365天。你可以根据需要调整有效期,例如-days 730
表示有效期为2年。-key server.key
:指定私钥文件。-out server.crt
:指定生成的证书文件名称。在执行上述命令时,系统会提示你输入一些信息:
CN
(中国)、US
(美国)。Beijing
。Beijing
。My Company
。IT Department
。example.com
或192.168.1.100
。/etc/nginx/nginx.conf
,或者在/etc/nginx/sites-available/
目录下有单独的配置文件。nginx.conf
。如果使用的是虚拟主机配置文件,找到对应的文件进行编辑。例如:sudo nano /etc/nginx/sites-available/default
或者:sudo nano /etc/nginx/nginx.conf
server
块,用于配置HTTPS服务。例如:server {
listen 443 ssl; # 监听443端口,并启用SSL
server_name your_domain_or_ip; # 替换为你的域名或IP地址
ssl_certificate /etc/nginx/ssl/server.crt; # 指定证书文件路径
ssl_certificate_key /etc/nginx/ssl/server.key; # 指定私钥文件路径
# 配置网站的根目录
root /var/www/html;
# 配置默认页面
index index.html index.htm;
# 其他配置(如伪静态规则等)...
}
listen 443 ssl;
:表示监听443端口,并启用SSL。server_name
:填写你的域名或IP地址。如果需要支持多个域名,可以用空格分隔,例如server_name example.com www.example.com
。ssl_certificate
:指定证书文件的路径。ssl_certificate_key
:指定私钥文件的路径。root
和index
:根据你的网站实际情况配置网站的根目录和默认页面。sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
sudo systemctl restart nginx
https://
。https
。问题描述:
无论是IIS还是Nginx,使用自签名证书时,浏览器都会提示证书不受信任,用户需要手动接受证书才能访问网站。
解决方法:
虽然自签名证书在生产环境中不推荐使用,但在本地开发或测试环境中,可以通过以下方法解决证书不受信任的问题。
Windows(IIS环境):
Win+R
),输入certmgr.msc
,然后按回车键。.cer
格式),选择该证书并完成导入。Linux(Nginx环境):
server.crt
)复制到客户端机器上。sudo cp server.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
问题描述:
在IIS中绑定自签名证书后,访问HTTPS网站时,浏览器提示“无法显示此网页”或“连接被重置”。
解决方法:
检查证书是否正确绑定:
检查防火墙设置:
检查网站是否启动:
检查证书是否过期:
问题描述:
在Nginx中配置自签名证书后,重启Nginx服务时,提示证书文件路径错误或证书文件不存在。
解决方法:
检查证书文件路径:
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ls
命令检查证书文件是否存在于指定路径下:ls /etc/nginx/ssl/
检查文件权限:
ls -l /etc/nginx/ssl/
sudo chmod 644 /etc/nginx/ssl/server.crt
sudo chmod 640 /etc/nginx/ssl/server.key
检查配置文件语法:
sudo nginx -t
问题描述:
在生成自签名证书时,提示错误,例如“无法找到文件”或“权限不足”。
解决方法:
检查OpenSSL安装:
openssl version
检查命令语法:
openssl genrsa -out server.key 2048
openssl req -new -x509 -days 365 -key server.key -out server.crt
检查文件路径:
/etc/nginx/ssl
目录下生成证书,确保该目录存在:sudo mkdir -p /etc/nginx/ssl
cd /etc/nginx/ssl
检查权限问题:
sudo
命令以管理员权限运行命令:sudo openssl genrsa -out server.key 2048
sudo openssl req -new -x509 -days 365 -key server.key -out server.crt
问题描述:
在Nginx配置文件中,配置了自签名证书后,重启Nginx服务时,提示错误,例如“无法加载证书”或“证书和私钥不匹配”。
解决方法:
检查证书和私钥是否匹配:
server.crt
)和私钥文件(server.key
)是成对的。如果证书和私钥不匹配,会导致Nginx无法正常启动。检查配置文件语法:
sudo nginx -t
检查证书文件格式:
server.crt
)和私钥文件(server.key
)是PEM格式。如果文件格式不正确,会导致Nginx无法加载证书。openssl x509 -in server.crt -out server.pem -outform PEM
openssl rsa -in server.key -out server.pem -outform PEM
检查Nginx版本:
nginx -v
启用强加密协议:
Win+R
,输入regedit
),导航到以下路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
Protocols
下,创建一个新的键值TLS 1.2
(如果尚未存在),并在其下创建两个子键:
Client
:在Client
下,创建一个名为DisabledByDefault
的DWORD值,将其值设置为0
。Server
:在Server
下,创建一个名为Enabled
的DWORD值,将其值设置为1
。禁用弱加密套件:
Protocols
下,找到TLS 1.2
的Server
子键,创建一个新的键值CipherSuites
。CipherSuites
下,创建一个名为Functions
的字符串值,将其值设置为允许的加密套件列表。例如:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM
配置证书吊销检查:
Win+R
,输入regedit
)。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters
EnableCertRevocationCheck
,将其值设置为1
以启用证书吊销检查。RevocationCheckFreshnessTime
,设置为一个合理的值(以秒为单位),例如86400
(一天)。配置HSTS(HTTP严格传输安全性):
Strict-Transport-Security
max-age=31536000; includeSubDomains; preload
(max-age
表示HSTS策略的有效期,单位为秒;includeSubDomains
表示该策略适用于所有子域名;preload
表示将网站加入HSTS预加载列表)。启用OCSP Stapling(在线证书状态协议装订):
Win+R
,输入regedit
)。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters
EnableOcspStapling
,将其值设置为1
以启用OCSP Stapling。OcspStaplingCacheValidityPeriod
,设置为一个合理的值(以秒为单位),例如86400
(一天)。启用强加密协议:
ssl_protocols
指令启用更安全的加密协议(如TLS 1.2或TLS 1.3)。/etc/nginx/nginx.conf
或/etc/nginx/sites-available/default
),在server
块中添加以下配置:ssl_protocols TLSv1.2 TLSv1.3;
配置强加密套件:
ssl_ciphers
指令配置强加密套件。推荐使用以下配置:ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
配置HSTS(HTTP严格传输安全性):
add_header
指令添加HSTS响应头:add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
启用OCSP Stapling:
ssl_stapling
指令启用OCSP Stapling:ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/nginx/ssl/trusted.crt; # 替换为你的信任证书文件路径
配置SSL会话缓存:
ssl_session_cache shared:SSL:10m; # 10MB的共享内存用于缓存会话
ssl_session_timeout 10m; # 会话超时时间为10分钟
启用SSL缓存:
Win+R
,输入regedit
)。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP\Parameters
EnableSslCache
,将其值设置为1
以启用SSL缓存。SslCacheSize
,设置为一个合理的值(以KB为单位),例如10240
(10MB)。配置连接超时时间:
120
(2分钟)。启用HTTP/2支持:
启用HTTP/2支持:
listen
指令启用HTTP/2支持:server {
listen 443 ssl http2;
...
}
配置TCP快速打开(TFO):
tcp_nopush on;
tcp_nodelay on;
启用Gzip压缩:
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
配置缓存策略:
sendfile
和tcp_nopush
指令优化文件传输:sendfile on;
tcp_nopush on;
优化日志记录:
access_log off; # 关闭访问日志
配置日志轮转和压缩:
logrotate
)来管理日志文件的大小和数量,并对旧日志进行压缩。/etc/logrotate.d/nginx
配置文件,添加以下内容:/var/log/nginx/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
优化连接池和并发处理:
worker_processes
和worker_connections
参数对性能有重要影响。worker_processes
通常设置为CPU核心数,而worker_connections
决定了每个进程可以处理的最大连接数。nginx.conf
文件中,配置如下:worker_processes auto; # 自动检测CPU核心数
events {
worker_connections 1024; # 每个worker进程的最大连接数
multi_accept on; # 允许每个worker进程同时接受多个连接
}
worker_connections
的值。启用缓存和代理缓存:
nginx.conf
文件中,添加以下配置:http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
proxy_cache_key "$scheme$request_method$host$request_uri";
}
server
块中,配置代理缓存:location / {
proxy_pass http://backend_server;
proxy_cache my_cache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
add_header X-Proxy-Cache $upstream_cache_status;
}
限制访问特定IP或IP范围:
nginx.conf
文件中使用allow
和deny
指令来实现。location /admin {
allow 192.168.1.0/24; # 允许192.168.1.0/24网段访问
deny all; # 禁止其他IP访问
proxy_pass http://backend_server;
}
启用HTTP头部安全增强:
nginx.conf
文件中,添加以下配置以增强HTTP头部的安全性:add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Frame-Options "DENY" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self';" always;
配置SSL/TLS会话票证:
nginx.conf
文件中,启用会话票证:ssl_session_tickets on;
ssl_session_ticket_key /etc/nginx/ssl/session_ticket.key;
openssl rand -out /etc/nginx/ssl/session_ticket.key 48
启用完美前向保密(PFS):
nginx.conf
文件中,配置如下:ssl_prefer_server_ciphers on;
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
启用详细的错误日志:
nginx.conf
文件中,将错误日志级别设置为debug
,以便捕获详细的错误信息:error_log /var/log/nginx/error.log debug;
debug
日志级别会产生大量日志,仅在调试时使用。分析访问日志:
goaccess
、ELK Stack
等)来分析Nginx的访问日志,了解流量模式、热门页面、错误请求等信息。goaccess
分析日志:sudo apt-get install goaccess
goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED
http:///report.html
查看。实时监控Nginx状态:
stub_status
模块,可以实时监控Nginx的状态。在nginx.conf
文件中,添加以下配置:server {
listen 80;
location /nginx_status {
stub_status on;
allow 127.0.0.1; # 仅允许本地访问
deny all;
}
}
http:///nginx_status
,可以查看当前的连接数、请求处理状态等信息。使用Nginx Plus(可选):
通过以上步骤,你可以为IIS和Nginx生成自签名证书,并进行详细的配置,包括安全性优化、性能提升和监控调试。虽然自签名证书在生产环境中不推荐使用,但在本地开发和测试环境中,这些步骤可以帮助你快速搭建HTTPS服务。
如果你需要在生产环境中使用SSL/TLS证书,建议购买由受信任的证书颁发机构(CA)签发的证书,以确保客户端不会收到安全警告。