通过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"
相关推荐
绀目澄清19 分钟前
私服网游云加速程序劫持流量排查与修复总结
windows·安全
明月心95221 分钟前
https配置
nginx·https配置
超防局2 小时前
网络安全渗透测试常用工具详解
网络·安全·web安全
她叫我大水龙3 小时前
nginx 编译指南:静态编译 + 动态编译
运维·nginx
hz567894 小时前
手术示教及远程会诊系统一体化方案:赋能医院教学与精准诊疗
安全·音视频·实时音视频·信息与通信
运维大师4 小时前
【Linux运维极简教程】11-防火墙与安全加固
运维·安全
国科安芯4 小时前
抗辐射微控制器在卫星电源管理分系统中的控制架构与可靠性研究——基于AS32S601型MCU的星载能源系统智能化管理技术分析
网络·单片机·嵌入式硬件·安全·架构·系统架构·能源
Fnetlink14 小时前
Fnet 云网安 260717
网络·安全·网络安全
Icoolkj5 小时前
ICOOLKJ 前后端分离项目完整部署文档(MySQL8.4+Redis+JDK21+Nginx+HTTPS+自动同步演示库)
redis·nginx·https
杨运交5 小时前
[049][Crypto模块]前后端混合加密API实战:基于Spring Boot的AES+RSA安全传输方案
spring boot·后端·安全