Nginx自签证书配置HTTPS协议访问

Nginx自签证书配置HTTPS协议访问 文章目录安装nginxfirewalld生成证书新建证书目录生成X509证书配置nginx配置文件访问测试附录生成双ip证书组件版本OSCentOS 7.5nginx1.14.1-9安装nginxyuminstallepel-release yuminstallnginx systemctl start nginxfirewalld如果有防火墙策略的需求的话,没有的话跳过# 允许http和https服务sudofirewall-cmd --add-servicehttpsudofirewall-cmd --add-servicehttpssudofirewall-cmd --runtime-to-permanent# 允许 80http,443(https) 端口sudoiptables-IINPUT-ptcp-mtcp--dport80-jACCEPTsudoiptables-IINPUT-ptcp-mtcp--dport443-jACCEPT生成证书新建证书目录mkdir/etc/ssl/privatesudochmod700/etc/ssl/private生成X509证书openssl req-x509-nodes-days365-newkeyrsa:2048\-keyout/etc/ssl/private/signed.key-out/etc/ssl/certs/signed.crt其中signed.key: RSA私钥signed.crt: 证书参数解释req: openssl子命令,使用X.509是一项公钥基础设施行业标准SSL/TLS遵从这个标准。-keyout: 私钥输出路径-out: 证书输出路径然后命令执行后需要输入一些证书信息Country Name(2letter code)[AU]: 直接回车 State or Province Name(full name)[Some-State]:直接回车 Locality Name(eg, city)[]:直接回车 Organization Name(eg, company)[Internet Widgits Pty Ltd]:直接回车 Organizational Unit Name(eg, section)[]:直接回车 Common Name(e.g. server FQDN or YOUR name)[]:输入IP Email Address[]:sampleqq.com配置nginx配置文件编辑/etc/nginx/nginx.conf,我的文件是这样的# For more information on configuration, see:# * Official English Documentation: http://nginx.org/en/docs/# * Official Russian Documentation: http://nginx.org/ru/docs/user nginx;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.include /usr/share/nginx/modules/*.conf;events{worker_connections1024;}http{log_format main$remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for;access_log /var/log/nginx/access.log main;sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout65;types_hash_max_size2048;include /etc/nginx/mime.types;default_type application/octet-stream;# Load modular configuration files from the /etc/nginx/conf.d directory.# See http://nginx.org/en/docs/ngx_core_module.html#include# for more information.include /etc/nginx/conf.d/*.conf;server{listen80default_server;listen[::]:80 default_server;server_name192.168.3.91;root /usr/share/nginx/html;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;location /{}error_page404/404.html;location/40x.html{}error_page500502503504/50x.html;location/50x.html{}}server{listen443ssl http2 default_server;listen[::]:443 ssl http2 default_server;server_name192.168.3.91;root /usr/share/nginx/html;ssl_certificate/etc/ssl/certs/signed.crt;ssl_certificate_key/etc/ssl/private/signed.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 10m;ssl_ciphersPROFILESYSTEM;ssl_prefer_server_ciphers on;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;location /{}error_page404/404.html;location/40x.html{}error_page500502503504/50x.html;location/50x.html{}}}重启nginx:systemctl restart nginx访问测试一开始会提示不安全直接详情-继续就看到https页面可以访问。之后就不会提示了。附录生成双ip证书使用以下命令生成一个私钥文件例如命名为 server.keyopenssl genrsa-outserver.key2048这里的 2048 表示生成的密钥长度可以根据实际需求调整。创建证书配置文件创建一个名为openssl.cnf的配置文件可以按需修改相关内容内容示例如下[ req ] default_bits 2048 prompt no default_md sha256 distinguished_name dn [ dn ] C US # 国家代码可按需修改 ST State # 州/省可按需修改 L City # 城市可按需修改 O Organization # 组织名称可按需修改 OU Organizational Unit # 部门可按需修改 CN example.com # 这里设置一个通用名称后续使用时要注意对应关系也可按需修改 [ req_ext ] subjectAltName alt_names [ alt_names ] IP.1 192.168.1.100 # 第一个IP地址替换成你实际想用的IP IP.2 10.0.0.50 # 第二个IP地址同样替换成真实IP在上述配置文件中的 IP.1 和 IP.2 处填写你需要在证书中包含的两个具体 IP 地址。生成证书签名请求CSR使用如下命令基于配置文件和私钥生成证书签名请求文件比如命名为 server.csropenssl req-new-keyserver.key-outserver.csr-configopenssl.cnf自签证书生成最后使用以下命令基于私钥、证书签名请求以及配置文件自签生成证书例如命名为 server.crt有效期这里设置为 365 天可根据需求调整openssl x509-req-days365-inserver.csr-signkeyserver.key-outserver.crt-extensionsreq_ext-extfileopenssl.cnf这样就生成了一个包含指定两个 IP 地址的自签 HTTPS 证书server.crt以及对应的私钥server.key。不过要注意自签证书通常不会被浏览器等客户端默认信任在实际应用中如果是用于测试等场景可以通过将自签证书添加到信任列表等方式来让客户端接受它进行连接测试等操作。本人微信公众号点关注不迷路~