在 Fabric CA 的上下文中,"enroll" 和 "reenroll" 有什么区别?

What is the difference between "enroll" and "reenroll" in the context of Fabric CA?

在 Fabric-CA 客户端的 CLI 文档(https://hyperledger-fabric-ca.readthedocs.io/en/release-1.4/clientcli.html) 中,有两个命令分别名为 "enroll" 和 "reenroll"。哪位高手能告诉我它们的区别?谢谢

注册命令用于首次向 CA 注册用户。

在某些情况下,证书可能会过期或遭到破坏(因此必须将其吊销)。所以这是重新注册的时候,您再次向 CA 注册相同的身份以获得新证书。

关于吊销证书的补充说明:

撤销可以出于多种原因(恰好 10 个),撤销时请不要忘记更新 CRL(证书撤销列表)。

请阅读文档的这些部分以更好地理解它们:

Reenrolling an Identity

Revoking an Identity

Generating a CRL

有疑问时代码是最好的文档

// Handle an enroll request, guarded by basic authentication
func enrollHandler(ctx *serverRequestContextImpl) (interface{}, error) {
    id, err := ctx.BasicAuthentication()
    if err != nil {
        return nil, err
    }
    resp, err := handleEnroll(ctx, id)
    if err != nil {
        return nil, err
    }
    err = ctx.ui.LoginComplete()
    if err != nil {
        return nil, err
    }
    return resp, nil
}

// Handle a reenroll request, guarded by token authentication
func reenrollHandler(ctx *serverRequestContextImpl) (interface{}, error) {
    // Authenticate the caller
    id, err := ctx.TokenAuthentication()
    if err != nil {
        return nil, err
    }
    return handleEnroll(ctx, id)
}

我们可以看到都调用了handleEnroll方法。唯一的区别似乎是 enroll 使用 BasicAuthenticationreenroll 使用 TokenAuthentication.

// BasicAuthentication authenticates the caller's username and password // found in the authorization header and returns the username

// TokenAuthentication authenticates the caller by token // in the authorization header. // Returns the enrollment ID or error.

因此,出于安全原因,您会先致电 enroll,提供您的用户名和密码。然后使用通过调用 enroll 获得的令牌到 reenroll 而无需再次暴露您的密码。因此,两者之间的区别纯粹是一种安全措施。是的,感谢 Fabric 让它变得混乱。