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

2020-08-21 19:10发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)你好社区, 我想使用客户...

         点击此处--->   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梦
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

一周热门 更多>