栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Nginx支持HTTPS,openssl生成SSL证书

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Nginx支持HTTPS,openssl生成SSL证书

./configure --prefix=/usr/local/nginx --with-http_ssl_module

1)创建SSL证书私钥,输入两次密码,生成文件为server.key

openssl genrsa -des3 -out server.key 2048


2)利用私钥生成一个不需要输入密码的密钥文件,生成文件为 server_nopass.key, 需要输入一次密码

 openssl rsa -in server.key -out server_nopass.key


3)创建SSL证书签名请求文件,生成SSL证书时需要使用到,生成文件为server.csr;
在生成过程中,我们需要输入一些信息,需要注意的是Common Name需要和网站域名一致

openssl req -new -key server.key -out server.csr


4)生成SSL证书,有效期为365天,生成文件为server.crt;

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

如果需要用pfx 可以用以下命令生成
openssl pkcs12 -export -inkey ssl.key -in ssl.crt -out ssl.pfx

在需要使用证书的nginx配置文件的server节点里加入以下配置就可以了。

没有域名也没事,直接配置 hosts 文件也是可以的

别忘了配完后刷新 dns 缓存: ipconfig/flushdns

ssl证书脚本

#!/bin/bash

client_ip=192.168.1.3
# 生成文件目标路径
dir=/var/dlp/data/emqx/certs

# 生成自签名的CA key和证书(简单起见客户端和服务端共用一个CA证书)
sudo openssl genrsa -out $dir/ca.key 2048
sudo openssl req -x509 -new -nodes -key $dir/ca.key -sha256 -days 3650 -subj "/CN=www.emqx.io" -out $dir/ca.pem

# 生成服务器端的key和证书
sudo openssl genrsa -out $dir/server.key 2048
sudo openssl req -new -key $dir/server.key -out $dir/server.csr -subj "/CN=127.0.0.1"
sudo openssl x509 -req -in $dir/server.csr -CA $dir/ca.pem -CAkey $dir/ca.key -CAcreateserial -out $dir/server.pem -days 3650 -sha256


# 生成客户端key和证书
sudo openssl genrsa -out $dir/client.key 2048
sudo openssl req -new -key $dir/client.key -out $dir/client.csr -subj "/CN=$client_ip"
sudo openssl x509 -req -in $dir/client.csr -CA $dir/ca.pem -CAkey $dir/ca.key -CAcreateserial -out $dir/client.pem -days 3650 -sha256


# PKCS1私钥转换为PKCS8(该格式java调用)
sudo openssl pkcs8 -topk8 -inform PEM -in $dir/client.key -outform pem -nocrypt -out $dir/pkcs8.pem

某域名下ssl证书生成

> openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /usr/local/ssl/nginx.key -out /usr/local/ssl/nginx.crt
 
> Country Name (2 letter code) [AU]:CN
> State or Province Name (full name) [Some-State]:BEIJING
> Locality Name (eg, city) []:BEIJING
> Organization Name (eg, company) [Internet Widgits Pty Ltd]:Mock
> Organizational Unit Name (eg, section) []:Mock
> # 注意此处必须是网站域名
> Common Name (e.g. server FQDN or YOUR name) []:www.a.com
> Email Address []:a@11.com

–with-http_ssl_module

#server {
#listen 80;
#server_name ip;
##把http的域名请求转成https
#return 301 https://$host$request_uri;
#}
server {
    listen       80; 
    listen       443 ssl; 
    server_name  ip;
    #ssl on;
    ssl_certificate      /usr/local/nginx/ssl/server.crt; 
    ssl_certificate_key  /usr/local/nginx/ssl/server_nopass.key; 
    ssl_protocols        TLSv1 TLSv1.1 TLSv1.2; # SSL协议版本
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # SSL加密算法
    ssl_prefer_server_ciphers  on; # 优先采取服务器算法
    ssl_session_cache    shared:SSL:10m; # 共享会话缓存大小
    ssl_session_timeout  10m; # 会话超时时间
location / {
root /data/vue_admin/dist;
index index.html index.htm;
proxy_redirect off;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
try_files $uri $uri/ /index.html =404;
client_max_body_size 1024m;
}
location /api {
        proxy_pass   http://192.168.3.101:8080; # 设置代理服务访问地址
        proxy_set_header  Host $host; # 设置客户端真实的域名(包括端口号)
        proxy_set_header  X-Real-IP  $remote_addr; # 设置客户端真实IP
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; # 设置在多层代理时会包含真实客户端及中间每个代理服务器的IP
        proxy_set_header X-Forwarded-Proto $scheme; # 设置客户端真实的协议(http还是https)
        #proxy_set_header REMOTE-HOST $remote_addr;
        index  index.html index.htm;
    }
 
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

Nginx与SpringBoot做Https认证
在SpringBoot的application.yml里面进行配置
server:
tomcat:
remoteip:
protocol-header: x-forwarded-proto
remote-ip-header: x-forwarded-for
remote:
port-header: X-Forwarded-Port
forward-headers-strategy: none
或者application.properties:
server.tomcat.remote_ip_header=x-forwarded-for
server.tomcat.protocol_header=x-forwarded-proto
server.tomcat.port-header=X-Forwarded-Port
server.use-forward-headers=true

server {
listen 80;
server_name 172.168.1.149 ;
rewrite ^(.*)$ https://${server_name}$1 permanent;
location / {
proxy_pass http://172.168.1.149:8080/api/test;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
}

server {
listen 443 ssl;
server_name 172.168.1.149;
ssl_certificate ssl/server.crt;
ssl_certificate_key ssl/server.key;
ssl_client_certificate ssl/ca.crt;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://172.168.1.149:8080/api/test;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
}
}



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/838553.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号