1

UserIdentity(user, password) コンストラクターに問題があります。私のパスワードは 4 文字です。サーバーに届いたパスワードの長さは 36 文字です。最初の 4 文字は私のパスワードです。残りはランダムなガベージです。

Opc.Ua.Client.dll と Opc.Ua.Core.dll のバージョンは 1.0.238.1 です。

何が原因で、パスワードを正しく送信するにはどうすればよいですか?

アップデート

ApplicationConfiguration configuration = Helpers.CreateClientConfiguration();
X509Certificate2 clientCertificate = configuration.SecurityConfiguration.ApplicationCertificate.Find();
configuration.CertificateValidator.CertificateValidation += new CertificateValidationEventHandler(CertificateValidator_CertificateValidation);
EndpointDescription endpointDescription = Helpers.CreateEndpointDescription(Url);
EndpointConfiguration endpointConfiguration = EndpointConfiguration.Create(configuration);
endpointConfiguration.OperationTimeout = 300000;
endpointConfiguration.UseBinaryEncoding = true;
ConfiguredEndpoint endpoint = new ConfiguredEndpoint(null, endpointDescription, endpointConfiguration);
BindingFactory bindingFactory = BindingFactory.Create(configuration);

if (endpoint.UpdateBeforeConnect)
{
    endpoint.UpdateFromServer(bindingFactory); 
    endpointDescription = endpoint.Description;
    endpointConfiguration = endpoint.Configuration;
}

SessionChannel channel = SessionChannel.Create(
    configuration,
    endpointDescription,
    endpointConfiguration,
    bindingFactory,
    clientCertificate,
    null);

m_Session = new Session(channel, configuration, endpoint);
m_Session.ReturnDiagnostics = DiagnosticsMasks.All;

m_Session.KeepAlive += new KeepAliveEventHandler(Session_KeepAlive);
m_Session.Notification += new NotificationEventHandler(m_Session_Notification);

UserIdentity identity;
if (userName == null || userName.Length == 0)
{
    identity = new UserIdentity();
}
else
{
    identity = new UserIdentity(userName, password);
}

m_Session.Open("ATF UA client", identity);
log.Debug("Connect ok");
4

1 に答える 1

1

残りはまったくゴミではありません。これは、CreateSessionResponse で OPC UA クライアントに送信したものと同じ ServerNonce になります。

OPC UA 仕様によると、UserIdentityToken 暗号化形式は次のとおりです。

  • 長さ - Byte[4] => パスワードの長さ
  • TokenData - Byte[*] => パスワード
  • ServerNonce - バイト[*]

OPC UA サーバーは主に 32 バイトの ServerNonce を使用し、パスワードは 4 バイトの長さであるため、パスワードの長さは 36 バイトです...

また、その UserIdentityToken で送信された ServerNonce が、CreateSessionResponse で提供したものと同じであることを確認する必要があります。

于 2013-03-12T16:55:59.537 に答える