(九)keycloak使用nginx来配置https

系列目录

(一)keycloak 部署运行及源码打包
(二)keycloak 配置运行
(三)keycloak 基于SpringBoot、Servlet的客户端开发
(四)keycloak 自定义用户(SPI)开发
(五)keycloak 自定义主题
(未完成)(六)keycloak 添加登录验证码功能
(七)keycloak 设置客户端访问类型 bearer-only
(八)keycloak 设置客户端访问类型 confidential
(九)keycloak使用nginx来配置https



前言

keycloak配置https有两种方式:

  • 直接在keycloak.conf中配置
  • 使用代理服务器配置,如nginx

因为还要同时配置其他应用服务,我们直接使用了nginx代理配置https,同时保留http访问


1.生成https需要的ssl证书

ssl证书生成也有很多种方式,可以直接免费的ssl商来生成,也可以自定义生成。

本篇教程主要使用openssl工具来生成自定义的证书

1.1 生成服务器端私钥

openssl genrsa -out /opt/server.key 2048

1.2 生成服务器端公钥

openssl rsa -in /opt/server.key -pubout -out /opt/server.pem

1.3 生成CA证书

openssl genrsa -out /opt/ca.key 2048
openssl req -new -key /opt/ca.key -out /opt/ca.csr

这个命令执行的时候注意下:

Common Name 这一项请填写你的域名

openssl x509 -req -in /opt/ca.csr -signkey /opt/ca.key -out /opt/ca.crt -days 3650

1.4 生成服务器证书

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

同样要注意 Common Name 这一项请填写你的域名

颁发证书

openssl x509 -req -CA /opt/ca.crt -CAkey /opt/ca.key -CAcreateserial -in /opt/server.csr -out /opt/server.crt -days 3650

1.5 生成cer文件

openssl x509 -in /opt/server.crt -out /opt/server.cer -outform der -days 3650

2.配置nginx

将生成的 servert.crt server.key 这两个文件配置到nginx中,我是直接将这两个文件复制到了nginx的配置文件目录,配置如下:

server {
    listen 8080;
    listen 443 ssl;
    server_name localhost,192.168.100.10;
   
    # 证书路径
    ssl_certificate csr.pem;
    ssl_certificate_key csr-key.pem;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
 
    # 以下配置为公共配置
    proxy_set_header Host $host:$server_port;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Port $server_port;
    # 页面引用的文件转到https的关键配置
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_redirect http:// $scheme://;
 
    # keycloak的代理地址,只代理 http
    location / { 
      proxy_pass http://192.168.100.1:8080;
    }
 
    location /demo{
        proxy_pass http://192.168.100.2:8080/demo;
    }

3.配置keycloak (此步骤非必须)

nginx配置完成后,需要在keycloak的conf配置文件中修改下配置

# nginx-https代理配置
# 代理模式 edge 或 passthrough
proxy=edge
hostname-strict=false
hostname-strict-https=false
spi-sticky-session-encoder-infinispan-should-attach-route=false
#https的端口,这个可以不用配置,因为我们没有用到

都配置完成后,重启nginx,重启keycloak,重启你的应用程序,这时候就可以同时使用http和https来访问你的项目了

4.常见问题

4.1 如果使用springboot的jar方式启动,需要配置下反向代理

server:
  # 如果nginx配置了https,springboot没有配置,需要在这里开启,否则无法跳转
  forward-headers-strategy: framework

或者

server:
  tomcat:
    remoteip:
      remote-ip-header: X-Forwarded-For
      protocol-header: X-Forwarded-Proto
      port-header: X-Forwarded-Port

这些配置对应到tomcat中(如果使用war包打包)conf\server.xml < host > 下

<Valve className="org.apache.catalina.valves.RemoteIpValve" 
               remoteIpHeader="X-Forwarded-For" 
			   portHeader="X-Forwarded-Port"
               protocolHeader="X-Forwarded-Proto"/>

4.2 如果tomcat或者java应用报错:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: :
 PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: 
 unable to find valid certification path to requested targe

报错原因是java不能信任这个证书导致的,解决方法有多种,这里只介绍将证书导入到jre中这一种。

4.2.1 首先将你证书 (证书可以直接从浏览器上导出) 格式选Base64编码

在这里插入图片描述

4.2.2 执行命令

keytool -importcert -alias 你保存证书的别名(任意值) -keystore /opt/jdk1.8.0_192/jre/lib/security/cacerts -file /opt/jdk1.8.0_192/jre/lib/security/server.cert

第一个路径为jre路径,第二个路径为你证书存放的路径

JDK默认证书的密码是 changeit
提示是否信任后输入Y

4.3 放到服务器上后使用外网IP访问http服务,出现需要ssl

在这里插入图片描述
并在代码中将 keycloak的
ssl-required设置为none

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChangSir-86

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值