Linux系统操作——Nginx使用OpenSSL实现https转发
2024-01-10 16:10:27
目录
1、配置方法一:http和https同时监听,自动跳转https;
一、OpenSSL创建自签名证书
1、下载安装OpenSSL
下载地址:https://www.openssl.org/source/
下载完成后上传到linux服务器上。
【安装OpenSSL】
tar -xzf openssl-1.1.1d.tar.gz
cd openssl-1.1.1d
mkdir /usr/local/openssl
./config --prefix=/usr/local/openssl
make
make install
【创建软连接】
which openssl
#/usr/bin/openssl
#为了使用方便,以及以后版本更新方便,可以创建软连接,如下:
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
#如果报异常,可以忽略
【列出动态库依赖关系】
cd /usr/local/openssl
ldd /usr/local/openssl/bin/openssl
【查看版本】
openssl version
?2、创建自签名的SSL证书和私钥
【生产私钥(key文件)】
# -genra 生成RSA私钥
# -des3 des3算法
# -out server.key 生成的私钥文件名
# -2048 私钥长度
#输入一个4位以上的密码。
openssl genrsa -des3 -out server.pass.key 2048
【去除私钥中的密码】
openssl rsa -in server.pass.key -out server.key
#说明:有密码的私钥是server.pass.key,没有密码的私钥是server.key
在第6步创建私钥的过程中,必须要指定一个密码,为了便于使用所以要删除私钥中的密码。
【生成CSR(证书签名请求)】
# -req 生成证书签名请求
# -new 新生成
# -key 私钥文件
# -out 生成的CSR文件
# -subj 生成CSR证书的参数
# 参数说明:/C 是国家,/ST 是省份,/L 是城市,/O 是企业,/OU 是部门,/CN 是域名或ip
openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=JiangXi/L=YingTan/O=cetc/OU=cetc/CN=gitlab.cetc.cn"
【生成自签名SSL证书】
# -days 证书有效期
#X.509证书包含三个文件:key,csr,crt。
#openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
#说明:
- key是服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密
- csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名
- crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有的公钥,以及签署者的签名等信息 备注:在密码学中,X.509是一个标准,规范了公开秘钥认证、证书吊销列表、授权凭证、凭证路径验证算法等。
?3、转换成.jks文件
【转还成pfx】
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt
#说明:
其中:server.pfx (转后的pfx)mycert.key,mycert.crt( crt和key格式的证书)
注意:该步骤需要输入密码passward,该密码2与3均需要用到
?
【查看证书别名】?
keytool -list -v -keystore server.pfx
【转为jks】?
keytool -importkeystore -srckeystore server.pfx -srcstoretype pkcs12 -destkeystore mycert.jks -deststoretype JKS -alias 1
#说明:
其中:-alias(设置别名) mycert.jks(转还后jks) server.pfx(需转还的pfx)
注意:该步骤需要输入3次密码,均采用1中的passward。
?
二、配置Nginx
配置中的
1、配置方法一:http和https同时监听,自动跳转https;
server {
listen 80;
listen 443 ssl;
server_name www.xxx.com xxx.com; #填写绑定证书的域名
#ssl on;
ssl_certificate 1_www.xxx.com_bundle.crt; #证书在conf文件同级,根据实际位置修改
ssl_certificate_key 2_www.xxx.com.key;#根据实际位置修改
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://127.0.0.1:8081; #转发到本机项目端口
}
}
2、配置方法二:http自动跳转https;
server {
listen 80;
server_name api.xxx.com;
#rewrite ^(.*) https://$server_name$1 permanent; #自动跳转到https
}
server {
listen 443 ssl;
server_name api.xxx.com; #填写绑定证书的域名
#ssl on; #新版本不需要配置,否则有警告
ssl_certificate 1_xx.com_bundle.crt;#根据实际crt位置修改
ssl_certificate_key 2_xx.com.key;#根据实际key位置修改
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
ssl_prefer_server_ciphers on;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:9000;
}
}
?3、配置方法三:http,https同时可访问;
server {
listen 80;
server_name api.xxx.com;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:8080;#根据实际ip地址修改
}
}
server {
listen 443 ssl;
server_name api.xxx.com; #填写绑定证书的域名
#ssl on;
ssl_certificate 1_xxx.com_bundle.crt;#根据实际crt位置修改
ssl_certificate_key 2_xxx.com.key;#根据实际key位置修改
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
ssl_prefer_server_ciphers on;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://127.0.0.1:8080;#根据实际ip地址修改
}
}
三、开放443端口
查看443端口是否开放
firewall-cmd --zone=public --query-port=443/tcp
返回yes表示已开启
文章来源:https://blog.csdn.net/weixin_50602850/article/details/135504143
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!