首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Openssl tls srp

Openssl tls srp
EN

Stack Overflow用户
提问于 2013-01-25 06:53:15
回答 1查看 1.6K关注 0票数 2

我想在我当前的项目中使用srp。但是对于如何使用openssl实现它,我有点不知所措。我让客户端运行了,但我不知道如何编写服务器端。我也找不到任何文档或者使用的示例实现。我想要的是将登录信息存储在数据库中,然后在需要时检索该数据。我在大多数网络部分使用poco,所以编写客户端相当简单,我在其他服务器上成功地测试了它。因此,我将非常感谢关于如何实现服务器端的提示。

EN

回答 1

Stack Overflow用户

发布于 2013-05-24 11:43:08

在OpenSSL归档的文件ssl/ssltest.c中有一个如何做到这一点的示例。

在较高级别上,您可以注册一个身份验证回调。此回调在SSL_Accept(期间根据需要自动调用),以对用户进行身份验证。

ssltest.c示例中,回调如下所示:

代码语言:javascript
复制
static int MS_CALLBACK ssl_srp_server_param_cb(SSL *s, int *ad, void *arg)
    {
    SRP_SERVER_ARG * p = (SRP_SERVER_ARG *) arg;

    if (strcmp(p->expected_user, SSL_get_srp_username(s)) != 0)
        {
        fprintf(stderr, "User %s doesn't exist\n", SSL_get_srp_username(s));
        return SSL3_AL_FATAL;
        }
    if (SSL_set_srp_server_param_pw(s,p->expected_user,p->pass,NULL)<0)
        {
        *ad = SSL_AD_INTERNAL_ERROR;
        return SSL3_AL_FATAL;
        }
    return SSL_ERROR_NONE;
    }

要注册您的呼叫

代码语言:javascript
复制
SSL_CTX_set_srp_username_callback(s_ctx, ssl_srp_server_param_cb);

回调函数的arg参数是一个传递给回调的空指针,这样您就可以从回调中引用应用程序中任何必要的应用程序上下文。

设置arg参数,调用SSL_CTX_set_srp_cb_arg(s_ctx, mypointer)

这真的很简单。确保SRP密码包含在您的密码列表中。

有一种方法可以获得关于认证失败的反馈,可以用来实现对高比率在线字典攻击的对策。

为此,调用SSL_CTX_set_info_callback(s_ctx,mynotifycallback)注册您的回调。已成功使用以下条件筛选不相关的通知。

代码语言:javascript
复制
void mynotifycallback(const SSL *s, int reason, int ret)
{
if (reason & SSL_CB_ALERT && ret & SSL3_AD_BAD_RECORD_MAC && SSL_get_srp_username((SSL *)s))
// authentication failure
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14512344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档