現在のプロジェクトで srp を使用したいと思います。しかし、opensslでそれをどのように実装するかについて、私はちょっと途方に暮れています。クライアント側を実行しましたが、サーバー側の書き方がわかりません。また、ドキュメントや使用例の実装も見つかりませんでした。私が望むのは、ログイン情報をデータベース内に保存し、必要に応じてそのデータを取得することです。私はほとんどのネットワーク部分に poco を使用しているため、クライアントの作成はかなり簡単で、他のサーバーに対してテストに成功しました。したがって、サーバー側の実装方法に関するヒントをいただければ幸いです。
1641 次
1 に答える
2
ssl/ssltest.c
OpenSSL アーカイブのファイルでこれを行う方法の例があります。
高レベルでは、認証コールバックを登録します。このコールバックはSSL_Accept(
、ユーザーを認証するために ) の間に必要に応じて自動的に呼び出されます。
コールバックの例からssltest.c
、次のようになります。
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;
}
登録するには電話する
SSL_CTX_set_srp_username_callback(s_ctx, ssl_srp_server_param_cb);
コールバック関数のarg
パラメーターは、コールバックからアプリケーションで必要なアプリケーション コンテキストを参照できるように、コールバックに渡される void ポインターです。
arg パラメータを設定するには call SSL_CTX_set_srp_cb_arg(s_ctx, mypointer)
;
これは本当に簡単です。SRP 暗号が暗号リストに含まれていることを確認してください。
高率のオンライン辞書攻撃に対する対策を実装するために使用できる、認証の失敗に関するフィードバックを取得する方法があります。
この呼び出しを行うにはSSL_CTX_set_info_callback(s_ctx,mynotifycallback)
、コールバックを登録します。以下の条件を使用して、無関係な通知をフィルタリングすることに成功しました。
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
}
于 2013-05-24T03:43:07.627 に答える