Nginx代理https请求的操作过程

理论很简单,过程很曲折,版本适配的问题要小心。

场景:
要和前端进行联调,我本地后端用了https,证书是自制的,主要是页面里面有一些oauth2认证的地方,需要跳转。
比如https://aaa.com/profile.html,认证通过之后要跳转到这个页面。

前端的电脑,直接访问后台的页面都是正常的,于是要加域名来实现上面的需求。

后端的电脑配置hosts,192.168.1.1 aaa.com
前端的电脑配置127.0.0.1 aaa.com

然后使用nginx代理,难点在于tomcat自制的jks证书不是nginx支持的,所以要进行转换。
转换的时候要用到openssl,注意其中有一个算法的问题,最好使用openssl旧版本,1.xxx,用新版本会涉及到一个算法不支持的问题,还需要调整。主要是我调整了没有成功,缺少对应的库。

keytool -list -keystore server.jks

会使用到里面的srcalias,不过用不用这个命令都可以,因为tomcat证书,后端肯定是配置了alias,用的就是配置的server.ssl.key-alias=tomcat。

2.将jks文件导出为Nginx所需要的文件.crt和.key
2.1 将”.jks”转为”.p12”(PKCS12格式的证书库)

keytool -importkeystore -srckeystore oldkeystore.jks -srcalias tomcat -destkeystore newkeystore.p12 -deststoretype PKCS12

查看新格式(pkcs12)证书库

keytool -deststoretype PKCS12 -keystore newkeystore.p12 -list

2.2提取证书

openssl pkcs12 -in newkeystore.p12 -nokeys -clcerts -out server-ssl.crt
openssl pkcs12 -in newkeystore.p12 -nokeys -cacerts -out gs_intermediate_ca.crt

server-ssl.crt是SSL证书,gs_intermediate_ca.crt是中级证书,俩个合并到一起才是nginx服务器所需要的证书

2.3合并证书

cat server-ssl.crt gs_intermediate_ca.crt >server.crt

此时server.crt是一个完成的证书
合并证书这里使用的是cat命令,其实就是两个证书的输出合并到同一个里面,但是我的不知道为什么gs_intermediate_ca.crt这个是空的,所以等于server.crt 就是 server-ssl.crt

2.4提取私钥

openssl pkcs12 -nocerts -nodes -in newkeystore.p12 -out server.key

server {
        listen       443  ssl;
        server_name  aaa.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
		
		ssl_certificate server.crt;
		ssl_certificate_key server.key;
		
		location / {
			proxy_pass https://192.168.1.1:443;  # 将请求转发到 https://example.com
			proxy_set_header Host $host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_set_header X-Forwarded-Proto $scheme;

			# SSL specific settings
			proxy_ssl_verify off;  # 如果你信任目标服务器,可以关闭 SSL 验证
			# proxy_ssl_trusted_certificate /path/to/trusted/ca/certs;  # 如果启用 SSL 验证,指定受信任的 CA 证书
			# proxy_ssl_verify_depth 2;  # SSL 验证的深度
		}

nginx用的是1.18版本,注意证书配置位置是相对conf的位置。

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