通过nginx+openssl自签名证书部署https应用并解决不安全问题

一、下载openssl软件

java 复制代码
https://slproweb.com/products/Win32OpenSSL.html

下载第一个轻量级即可,安装一直下一步即可。

安装完成后将目录复制(找到bin文件夹并打开复制绝对路径)

找到电脑高级环境变量将复制的路径添加到path后面

二、下载nginx

java 复制代码
https://nginx.org/en/download.html

生成证书并配置nginx(一)

打开cmd依次输入下方命令

xml 复制代码
openssl genrsa -out private.key 2048
这里2048是密钥的位数,你可以根据需要选择更高的位数,如4096位。


openssl req -new -key private.key -out certificate.csr
使用以下命令来生成CSR,你需要提供一些信息如国家、州/省、城市、组织名、组织单位、常用名(CN)

openssl x509 -req -days 365 -in certificate.csr -signkey private.key -out certificate.crt
快速测试或开发环境,可以生成一个自签名证书,这里-days 365指定证书的有效期为365天。

nginx文件修改
server {
    listen 443 ssl;
    server_name your_domain.com;

    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;

    # 可选:指定使用的协议和密码套件
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;

    location / {
        # 你的其他配置...
    }
}

nginx -s reload

nginx配置更新生效

生成证书并配置nginx(二)

1、使用指定-subj "/C=CN/ST=MyProvince/L=MyCity/O=MyOrganization",生成根证书私钥和根证书 -keyout CA-private.key -out CA-certificate.crt

xml 复制代码
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -subj "/C=CN/ST=MyProvince/L=MyCity/O=MyOrganization" -keyout CA-private.key -out CA-certificate.crt -reqexts v3_req -extensions v3_ca

2、生成自签名证书私钥 -out private.key

xml 复制代码
openssl genrsa -out private.key 2048

3、根据自签名证书私钥生成自签名证书申请文件 private.csr

xml 复制代码
openssl req -new -key private.key -subj "/C=CN/ST=MyProvince/L=MyCity/O=MyOrganization/CN=192.168.31.10" -sha256 -out private.csr

添加private.ext文件(解决chrome安全告警)

定义自签名证书扩展文件,在默认情况下生成的证书一旦选择信任,在 Edge, Firefox 等浏览器都显示为安全,但是Chrome仍然会标记为不安全并警告拦截,

这是因为 Chrome 需要证书支持扩展 Subject Alternative Name, 因此生成时需要特别指定 SAN 扩展并添加相关参数,将下述内容放到一个文件中

xml 复制代码
[ req ]
default_bits        = 1024
distinguished_name  = req_distinguished_name
req_extensions      = san
extensions          = san
[ req_distinguished_name ]
countryName         = CN
stateOrProvinceName = Definesys
localityName        = Definesys
organizationName    = Definesys
[SAN]
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = IP:192.168.31.10

4、

根据根证书私钥及根证书-CA CA-certificate.crt -CAkey CA-private.key、自签名证书申请文件 -in private.csr、自签名证书扩展文件 -extfile private.ext,生成自签名证书private.crt

xml 复制代码
openssl x509 -req -days 3650 -in private.csr -CA CA-certificate.crt -CAkey CA-private.key -CAcreateserial -sha256 -out private.crt -extfile private.ext -extensions SAN
xml 复制代码
#nginx
 server {
	listen       443 ssl;
	server_name  localhost;
	ssl_certificate      /etc/nginx/ssl/private.crt;
	ssl_certificate_key  /etc/nginx/ssl/private.key;
	ssl_session_cache    shared:SSL:1m;
	ssl_session_timeout  5m;
	ssl_ciphers  HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers  on;
	location / {
		root   html;
		index  index.html index.htm;
	}
}

5、遇到证书不受信任时,可以将该CA的根证书安装到你的系统或浏览器的"受信任的根证书颁发机构"存储区中

把该证书CA-certificate.crt安装到受信任的根证书颁发机构下,即可从谷歌浏览器正常访问https的对应网址且不会报不安全警告。

xml 复制代码
windows安装证书:
搜索栏输入"管理计算机证书或管理用户证书",然后选择打开"证书管理器"。
或运行certmgr.msc命令打开
在证书管理器中,选择"受信任的根证书颁发机构">证书文件夹。
右键选择"所有任务" > "导入"。
按照证书导入向导的指示,选择证书文件,完成导入

浏览器(以Chrome为例)安装证书:
打开Chrome浏览器(菜单按钮)选择"设置" 搜索并点击"隐私和安全"。
点击"安全"部分下的"管理证书"。
在弹出的"证书"窗口中,选择"受信任的根证书颁发机构"标签页,然后点击"导入"。
按照向导指示选择下载的证书文件并完成安装。
bash 复制代码
批处理导入证书右键管理员运行即可
certutil -addstore Root "D:\ssl\CA-certificate.crt"
相关推荐
用户962377954488 小时前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机11 小时前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机11 小时前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户9623779544813 小时前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star13 小时前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户9623779544816 小时前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
小时前端16 小时前
HTTPS 页面加载 HTTP 脚本被拦?同源代理来救场
前端·https
闲云一鹤1 天前
nginx 快速入门教程 - 写给前端的你
前端·nginx·前端工程化
cipher2 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全