通过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"
相关推荐
上海云盾-小余2 小时前
网站恶意爬虫拦截策略:智能识别与封禁实操方案
网络·爬虫·安全·web安全
2301_780789663 小时前
手游遇到攻击为什么要用SDK游戏盾手游遇到攻击为什么要用 SDK 游戏盾?
安全·web安全·游戏·架构·kubernetes·ddos
DONSEE广东东信智能读卡器4 小时前
用PowerShell实现Windows 本地 WSS/HTTPS 自签名证书配置方法
windows·网络协议·https·powershell·身份证阅读器
黎阳之光4 小时前
黎阳之光:视频孪生重构新能源智慧工地,打造大型风光基地数智化建设标杆
大数据·人工智能·物联网·安全·数字孪生
2501_916007474 小时前
iOS开发中抓取HTTPS请求的完整解决方法与步骤详解
android·网络协议·ios·小程序·https·uni-app·iphone
Agent手记5 小时前
安全生产巡检全流程自动化与隐患预警方案:2026工业Agent落地实战指南
数据库·人工智能·安全·ai·自动化
效能革命笔记5 小时前
Gitee DevSecOps 智能版本管理:军工软件工厂的依赖治理与供应链安全方案
网络·安全·gitee
tonydf5 小时前
Nginx爆新的RCE漏洞!别担心,平滑升级即可。
后端·nginx
未若君雅裁5 小时前
Spring Bean 作用域、线程安全与生命周期
java·安全·spring
曹牧6 小时前
Nginx 504
运维·nginx