0

私は現在、HiveMQ プラグインの開発を掘り下げています。AfterLoginCallback に基づいてカスタム機能を開発しました。有効な TLS 接続を構成し、クライアント証明書に接続できました。

mosquitto_pub.exe -t test -m "testMessage" --cafile myCertificates/hivemq-server-cert.pem  --cert myCertificates/sender.crt --key myCertificates/sender.key -p 8883"

ただし、AfterLoginCallback コードをデバッグすると、"ClientData -> certificate" が "null" で、アクセス時に IllegalStateExcpetion がスローされることがわかりました。

[INFO] java.lang.IllegalStateException: Optional.get() cannot be called on an absent value
[INFO]  at com.google.common.base.Absent.get(Unknown Source)
[INFO]  at mycode.hivemq.plugins.first_plugin.callbacks.AfterLoginCallbackTest.afterSuccessfulLogin(AfterLoginCallbackTest.java:33)

なぜ証明書がnullなのか、誰でも説明できますか?

ありがとう、ロムンゴ

4

1 に答える 1

6

資格情報を確認するためのコールバックでは、次のclientDataように処理する必要があります 。ClientCredentialData

次に例を示します。

public class AuthorizationCallback implements OnAuthenticationCallback, OnAuthorizationCallback {

    @Override
    public Boolean checkCredentials(@NotNull final ClientCredentialsData clientData) throws AuthenticationException {

        //Throw out clients which didn't provide a client certificate
        if (!clientData.getCertificate().isPresent()) {
            log.debug("Client {} didn't provide a client certificate. Disconnecting client", clientData.getClientId());
            throw AuthenticationExceptions.WRONG_CERTIFICATE;
        }

        final Certificate certificate = clientData.getCertificate().get().certificate();
        ...
        }

}

それが役立つことを願っています!

于 2019-01-29T12:26:29.053 に答える