WSO2身份服务器X509代理后身份验证

WSO2身份服务器X509代理后身份验证,wso2,wso2is,Wso2,Wso2is,我正在使用WSO2 Identity Server 5.10。 我需要添加对X509身份验证的支持,我正在阅读有关X509证书身份验证的文档 为了添加配置,我必须按照建议修改catalinaserver.xml.j2文件 这么做,它的工作,但我有一个非常巨大的港口混合。。。。不管怎样,让我们假设它是有效的 现在我遇到了这个问题:我需要在K8S集群中部署WSO2 Identity Server。因此,基本上,我有一个nginx入口控制器,它将管理到后端的所有流量 我在本地做的是放置一个简单的ngi

我正在使用WSO2 Identity Server 5.10。 我需要添加对X509身份验证的支持,我正在阅读有关X509证书身份验证的文档 为了添加配置,我必须按照建议修改
catalinaserver.xml.j2
文件

这么做,它的工作,但我有一个非常巨大的港口混合。。。。不管怎样,让我们假设它是有效的

现在我遇到了这个问题:我需要在K8S集群中部署WSO2 Identity Server。因此,基本上,我有一个nginx入口控制器,它将管理到后端的所有流量

我在本地做的是放置一个简单的nginx反向代理,并配置WSO2 Identity Server以使用该代理。因此,在我的
deployment.toml
中,我执行了以下操作

[custom_trasport.x509.properties]
protocols="HTTP/1.1"
port="8443"
maxThreads="200"
scheme="https"
secure=true
SSLEnabled=true
keystoreFile="mykeystore.jks"
keystorePass="pwd"
truststoreFile="myclient_trust.jks"
truststorePass="myclient_trust_pwd"
bindOnInit=false
clientAuth="want"
sslProtocol = "TLS"
proxyPort="443"


[authentication.authenticator.x509_certificate.parameters]
name ="x509CertificateAuthenticator"
enable=true
AuthenticationEndpoint="https://$ref{server.hostname}:8443/x509-certificate-servlet"
username= "CN"
SearchAllUserStores="false"
EnforceSelfRegistration = "false"
SearchAndValidateUserLocalStores = "false"


[transport.https.properties]
proxyPort="443"
这样,当我想使用X509证书身份验证登录时,它会请求我的证书,但当我选择证书时,它会显示错误,因为它无法在浏览器请求中找到证书

此外,我认为我不应该离开
AuthenticationEndpoint=“https://$ref{server.hostname}:8443/x509证书servlet”
,因为这意味着提交将完成到从未在internet上公开的8443端口

有人解决了这个问题吗?基本上,问题是:如何在代理(例如nginx)后面配置X509证书身份验证

任何小费都是非常宝贵的

多谢各位


安吉洛

我想我解决了我面临的问题

基本上,当我有一个反向代理(例如nginx)时,certicate不会到达request属性中的tomcat

我所做的是配置reverse_代理将证书作为HTTP头,而不验证它;我将在服务器端进行验证

现在我的nginx配置是:

server {
        listen 443;
        server_name wso2_iam;
        ssl on;
        ssl_certificate certificate_full_path.crt;
        ssl_certificate_key full_path_to_kwy_no_pwd.key;
        ssl_verify_client optional_no_ca;

       
        location /x509-certificate-servlet/ {
                   proxy_set_header X-Forwarded-Host $host;
                   proxy_set_header X-Forwarded-Server $host;
                   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                   proxy_set_header Host $http_host;
                   proxy_set_header X-SSL-CERT $ssl_client_escaped_cert;
                   proxy_read_timeout 5m;
                   proxy_send_timeout 5m;
                   proxy_pass https://127.0.0.1:8443/x509-certificate-servlet;

                   proxy_http_version 1.1;
                   proxy_set_header Upgrade $http_upgrade;
                   proxy_set_header Connection "upgrade";
        }
        location / {
                   proxy_set_header X-Forwarded-Host $host;
                   proxy_set_header X-Forwarded-Server $host;
                   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                   proxy_set_header Host $http_host;
                   proxy_set_header X-SSL-CERT $ssl_client_escaped_cert;
                   proxy_read_timeout 5m;
                   proxy_send_timeout 5m;
                   proxy_pass https://127.0.0.1:9443/;

                   proxy_http_version 1.1;
                   proxy_set_header Upgrade $http_upgrade;
                   proxy_set_header Connection "upgrade";
            }
        error_log  /var/log/nginx/wso2-error.log;
        access_log  /var/log/nginx/wso2-access.log;
}
ssl\u验证\u客户端可选\u否\u ca告诉nginx检索证书,但不验证它

proxy\u set\u头X-SSL-CERT$SSL\u客户端\u转义\u证书
指令告诉nginx将基于PEM的证书放入名为
X-SSL-CERT

然后我修改了
org.wso2.carbon.identity.authenticator.x509Certificate.X509CertificateAuthenticator
,以便在http请求属性中找不到证书时在请求头之间搜索证书

它似乎起作用了

谢谢大家

安杰洛