当前位置: 首页 > 面试题库 >

具有X.509证书的Spring Security

仰欣悦
2023-03-14
问题内容

我正在慢慢地疯狂尝试配置Spring Security 3.0.0以保护应用程序。

我已将服务器(码头)配置为要求客户端身份验证(使用智能卡)。但是,我似乎无法正确获得applicationContext-
security.xml和UserDetailsS​​ervice实现。

首先,从应用程序上下文文件中:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:security="http://www.springframework.org/schema/security"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
            http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">


<security:global-method-security secured-annotations="enabled" />

<security:http auto-config="true">
    <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" requires-channel="https"/>
    <security:x509 subject-principal-regex="CN=(.*?)," user-service-ref="accountService" />
</security:http>

<bean id="accountService" class="com.app.service.AccountServiceImpl"/>

UserDetailsS​​ervice看起来像这样:

public class AccountServiceImpl implements AccountService, UserDetailsService {

private static final Log log = LogFactory.getLog(AccountServiceImpl.class);

private AccountDao accountDao;

@Autowired
public void setAccountDao(AccountDao accountDao) {
    this.accountDao = accountDao;
}

public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException, DataAccessException {

    log.debug("called loadUserByUsername()");
    System.out.println("called loadByUsername()");

    Account result = accountDao.getByEdpi(s);
    return result;

}

}

该应用程序具有带有“登录”按钮的“首页”,因此访问该页面无需进行任何身份验证。

任何帮助表示赞赏。


问题答案:

该应用程序具有带有“登录”按钮的“首页”,因此访问该页面无需进行任何身份验证。

这里出了点问题。如果您将Servlet容器设置为 需要
客户端身份验证,则无法拥有这样的“所有人开放”页面,在这种情况下,没有智能卡的用户无法成功进行身份验证握手,甚至不会看到容器错误页面-这将是浏览器错误。

可以通过创建容器来 允许 客户端身份验证,并使登录页面向匿名用户打开并通过SpringSec保护其他页面来完成。但是我不建议将其用于智能卡-
PKI应用程序。智能卡身份验证意味着安全性的重要性,让非智能卡用户尽早放弃容器握手更为可靠。在这种情况下,您仍然可以在另一个端口上使用用户友好的“登录”页面,并且将“登录”按钮链接到您的应用程序。

如果您需要有关SpringSecurity设置的帮助,请在帖子中添加有关问题的更多信息。



 类似资料:
  • 伙计们!我正在尝试使用bouncycastle创建X.509证书,它应该由另一个证书签名并存储它的PEM base 64格式。 我已经有了自签名证书(公钥和私钥)。现在我要创建一个新的,并用现有的自签名证书签名。 验证无例外地通过了,这意味着从我的观点来看,它是由Cacert成功签署的: 然后将其解码到PEM base 64:

  • 问题内容: 可以说我有这样的东西(客户端代码): 这段代码是完整的功能,但是我真的不知道如何根据pem文件中可用的一个具体的CA证书来验证服务器的证书。 所有证书均由我的自签名CA签名,这是我需要根据其进行验证的CA(仅针对此证书)。 每个答案表示赞赏。 编辑: 回应 jglouie (非常感谢您-无法投票支持您的答案)。 我创建了解决方案: 问题答案: 我假设您的CA的自签名证书已按以下方式加载

  • 问题内容: 我正在尝试根据此帖子更新SSL证书 。 我没有证书,因此我遵循了本指南。但是,当我进入 我得到错误: 我该如何解决? 问题答案: 您的cacerts.pem文件是否包含一个证书?由于它是PEM,因此请先看一下 并以 最后,要检查它是否未损坏,请使用openssl并使用来打印其详细信息

  • 我们使用Azure服务总线和Azure Web应用程序来填充队列。它们位于同一资源组中。我们使用WindowsAzure。服务总线v2。6.5. 我们很少得到这个错误: X.509证书CN=servicebus.windows.net不在受信任人员存储区中。X.509证书CN=servicebus.windows.net链构建失败。使用的证书具有无法验证的信任链。替换证书或更改证书验证模式。无法为

  • 我使用Spring Security使用x.509证书进行身份验证,它仅在浏览器密钥存储库中配置的客户端证书存在于服务器信任存储库中时才工作。 它目前是如何工作的: 我已将SSL客户端身份验证配置为可选(server.SSL.client auth=want,如本文所示) 我已经配置了一个包含所有客户端证书的服务器信任存储。如果客户端提供的证书位于信任存储中,则会创建相互SSL连接 当我的客户端证

  • 问题内容: 我已经看到了很多有关如何将X.509转换为指数模量的示例,但是我没有看到相反的例子。 我从关键端点获得的值如下所示: 我认为这是关键: 如果有人能指出我正确的方向,请使用GO语言。我还将它放在Go Lang游乐场上,以便其他人可以使用它。 问题答案: 您可以将值直接放入,可以按原样使用。由于要将其编码为pem编码的x.509,因此可以使用该函数封送der块,并使用pem包对其进行编码。