Linux系统操作——Nginx使用OpenSSL实现https转发

目录

一、OpenSSL创建自签名证书

1、下载安装OpenSSL

 2、创建自签名的SSL证书和私钥

 3、转换成.jks文件

二、配置Nginx

1、配置方法一:http和https同时监听,自动跳转https;

2、配置方法二:http自动跳转https;

 3、配置方法三:http,https同时可访问;

三、开放443端口


一、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表示已开启

Linux系统操作——开放443端口-CSDN博客

你可能感兴趣的:(linux系统,nginx,https,运维)