SAP Cloud Platform JAVA Servlet:客户端证书身份验证不起作用

2020-08-21 19:10发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好社区,

我想使用客户端证书认证来保护我的JAVA Servlet之一:

字符串用户= request.getRemoteUser();
 //验证用户身份
  如果(用户!= null){
     _Logger.info("用户已通过身份验证");
  }
  其他{
   //验证用户身份
    LoginContext loginContext;
    尝试{
        loginContext = LoginContextFactory.createLoginContext(" CERT");
        loginContext.login();
       //更新用户
        用户= request.getRemoteUser();
    } catch(LoginException e){
       _Logger.error("身份验证失败:",e);
        返回;
    }
  }
      

我创建了证书,并与我的CA签署了证书。 我将证书添加到密钥库中,并按以下说明将其上传到SCP:

https://help.sap.com/viewer/ 65de2977205c403bbc107264b8eccf4b/Cloud/zh-CN/0d7cf63b75a94f869895186a2d38db41.html

此外,我将域 cert.hana.ondemand.com 添加到了我的域中 Java应用程序。

例如,当我使用工具" SoapUi"或JAVA HttpClient调用servlet并发送证书时,我总是使用LoginException:

 avax.security.auth.login.LoginException:客户端证书在请求中不可用

有人知道出什么问题了吗?

最好的问候和感谢,

克里斯

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好社区,

我想使用客户端证书认证来保护我的JAVA Servlet之一:

字符串用户= request.getRemoteUser();
 //验证用户身份
  如果(用户!= null){
     _Logger.info("用户已通过身份验证");
  }
  其他{
   //验证用户身份
    LoginContext loginContext;
    尝试{
        loginContext = LoginContextFactory.createLoginContext(" CERT");
        loginContext.login();
       //更新用户
        用户= request.getRemoteUser();
    } catch(LoginException e){
       _Logger.error("身份验证失败:",e);
        返回;
    }
  }
      

我创建了证书,并与我的CA签署了证书。 我将证书添加到密钥库中,并按以下说明将其上传到SCP:

https://help.sap.com/viewer/ 65de2977205c403bbc107264b8eccf4b/Cloud/zh-CN/0d7cf63b75a94f869895186a2d38db41.html

此外,我将域 cert.hana.ondemand.com 添加到了我的域中 Java应用程序。

例如,当我使用工具" SoapUi"或JAVA HttpClient调用servlet并发送证书时,我总是使用LoginException:

 avax.security.auth.login.LoginException:客户端证书在请求中不可用

有人知道出什么问题了吗?

最好的问候和感谢,

克里斯

付费偷看设置
发送
4条回答
My梦
1楼-- · 2020-08-21 19:40

克里斯托弗,你好

您如何访问您的应用程序?

发出发出向其添加" cert"域的neo命令后,这是访问应用程序的正确方法。

 https://  .cert.hana.ondemand.com/ 

代替:

 https://  .hana.ondemand.com/ 

我生成了一个战争文件,并使用驾驶舱来部署该应用程序,因此我可以如下指定VM参数:

 -Dcom.sap.cloud.crypto.clientcert.mapping_mode = CN 

如果您在部署期间未指定此选项,则您的证书URL将不起作用。

您可以通过neo deploy命令指定此VM参数,但是您必须事先准备application.properties文件。

请注意,如果您未使用此处客户端证书将永远不会被浏览器发送,因为它不是SCP信任的证书。

如果是这种情况,建议您将SCP与公司IdP一起使用,以使用SAML对用户进行身份验证。 此设置将支持内部CA颁发的证书(因为身份验证委托给您的IdP),并且该身份验证对于SCP上的所有应用程序均有效。

我看到了以下附加的VM参数:

 -Dcom.sap.cloud.crypto.clientcert.keystore_name = tomcat 

是jks文件的名称(即C:\ tomcat.jks)。 我已经测试了这种情况,但是它对我来说并不是很有效。 我本来希望看到两个客户端证书,但是浏览器仅显示我的SAP客户端证书。 这使我想到未考虑密钥库。

尽管如此,请检查此jks上需要哪些CA,因为它们与您用于本地测试的CA可能不完全相同。 您所需要做的就是对存储在浏览器中的p12客户端证书进行签名的根证书和中间证书。

希望有帮助。

关于,
Ivan

bbpeas
2楼-- · 2020-08-21 19:44

也许OAuth客户端凭据流也是机器对机器通信的好方法。

Nan4612
3楼-- · 2020-08-21 19:21

嗨,Ivan,

非常感谢您的回答。

是的,我在应用程序中添加了" cert"域,并在请求中使用了" cert"网址。

我使用以下命令来部署没有application.properties文件的应用程序。 这个文件是必需的,我如何在其中设置vm参数?

新部署--host hana.ondemand.com-帐户-应用程序 --user  --vm-arguments" -Dcom.sap.cloud.crypto.clientcert.mapping_mode =  CN" 

我使用了一个由我自己创建的自定义CA来签署我的客户证书。 也许是问题所在? 如何使用上述CA之一(我不是证书专家)?

我已经配置了一个SAML IDP,用于在SCP上托管的应用程序,并且运行良好。

但是我有一个场景,客户在后端系统中调用我的云服务。 在这种情况下,SAML是不可能的,因为它是"机器之间的机器"通信。 在这种情况下,我想使用客户端证书进行身份验证。 还是您看到一种更好的方法?

最好的问候

克里斯

打个大熊猫
4楼-- · 2020-08-21 19:33

嗨克里斯,

我和您的情况相同,后端系统连接到云服务。

您解决了这个问题吗? 对于您针对此问题的解决方案,我感到非常好奇。

非常感谢。

Alex。

一周热门 更多>