12.5.2. 配置安全远程密码协议


要在应用程序里使用安全远程密码(Secure Remote Password,SRP)协议,你首先可以创建一个实现 SRPVerifierStore 接口的 MBean。关于这个实现的信息位于 SRPVerifierStore 实现

过程 12.3. 集成现有的密码库

  1. 创建 hashed 密码信息库。

    如果密码已经以不可逆的 hashed 形式存储,对每个用户你都需要这么做。
    你可以实现 setUserVerifier(String, VerifierInfo) 为 noOp 方法,或者抛出表示这个库是只读的异常。
  2. 创建 SRPVerifierStore 接口。

    创建一个可以从你创建的库里获取 VerifierInfoSRPVerifierStore 接口实现。
    verifyUserChallenge(String, Object) 可用来集成现有的基于硬件令牌的模式(如 SafeWord 或 Radius)到 SRP 算法。这个接口方法只有当客户 SRPLoginModule 配置指定了 hasAuxChallenge 选项才被调用。
  3. 创建 JNDI MBean。

    创建一个开放 JNDI 可用的 SRPVerifierStore 接口的 MBean,并开放任何所需的可配置参数。
    默认的 org.jboss.security.srp.SRPVerifierStoreService 允许你实现它。你也可以用 SRPVerifierStore 的一个 Java 属性文件实现来实现这个 MBean。
SRPVerifierStore 实现

我们不推荐在产品环境里使用 SRPVerifierStore 接口的默认实现,因为它要求所有的密码

SRPVerifierStore 实现为给定用户提供了对 SRPVerifierStore.VerifierInfo 对象的访问。SRPService 在启动用户 SRP 会话来获取 SRP 算法所需参数时调用 getUserVerifier(String)

VerifierInfo 对象的元素

username
用来验证的用户 ID 或用户名
verifier
用户输入作为标识符凭证的单向哈希密码。org.jboss.security.Util 类包含了一个 calculateVerifier 方法,它执行密码的哈希算法。输出密码采用 H(salt | H(username | ':' | password)) 形式,其中 H 是 RFC2945 定义的 SHA 安全哈希功能。用户名将使用 UTF-8 编码从字符串转换为 byte[]。
salt
当数据库泄露时,随机数字用于增加对 verifier 密码数据库的 brute force 字典攻击的难度。当用户的现有明文密码进行哈希加密时,这个值应该根据一个强加密的随机数字算法生成。
g
SRP 算法的原始生成器。它可以是一个众所周知的固定参数而不用对每个用户进行设置。org.jboss.security.srp.SRPConf 工具类为 g 提供了几个设置,包括通过 SRPConf.getDefaultParams().g() 获得的合适的默认值。
N
SRP 算法的 safe-prime 系数。它可以是一个众所周知的固定参数而不用对每个用户进行设置。org.jboss.security.srp.SRPConf 工具类为 g 提供了几个设置,包括通过 SRPConf.getDefaultParams().g() 获得的合适的默认值。

例 12.13. SRPVerifierStore 接口

package org.jboss.security.srp;

import java.io.IOException;
import java.io.Serializable;
import java.security.KeyException;

public interface SRPVerifierStore
{
    public static class VerifierInfo implements Serializable
    {

        public String username;


        public byte[] salt;
        public byte[] g;
        public byte[] N;
    }
    

    public VerifierInfo getUserVerifier(String username)
        throws KeyException, IOException;

    public void setUserVerifier(String username, VerifierInfo info)
        throws IOException;


     public void verifyUserChallenge(String username, Object auxChallenge)
         throws SecurityException;
}
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat