OpenSecureChannel request

Note

Add more information about: * ua time format * the Construct * openSSL

The OPC UA OpenSecureChannel request

The OpenSecureChannel request contains the following fields:

Parameter Datatype Value Comments
MessageType 3 ACII bytes OPN from Open
IsFinal 1 ASCII byte F from final
MessageSize ULInt32    
SecureChannelId ULInt32    
SecurityPolicyUriLength ULInt32    
SecurityPolicyUri String NONE [SecPol] utf-8 encoded.
SenderCertificateLength ULInt32    
SenderCertificate Array of bytes a DER encoded blob  
ReceiverCertificateThumbprintLength ULInt32    
ReceiverCertificateThumbprint Array of bytes    
Sequencenumber ULInt32    
RequestId ULInt32    
EncodingByte ULInt8 (ENUM)    
NameSpace Byte    
Identifier UInt16    
AuthenticationTokenEncodingByte Byte    
AuthenticationTokenIdentifier Byte    
TimeStamp ULInt64    
RequestHandle ULInt32    
ReturnDiagnostics ULInt32    
AuditEntryId String    
TimeOutHint ULInt32    
AHEncodingByte ULInt8 (ENUM)    
AHIdentifier Byte    
AHEncoding Byte    
ProtocolVersion ULInt32    
RequestType ULInt32    
SecurityMode ULInt32    
ClientNonce ULInt32    
RequestedLifetime ULInt32    

Construct

Using Construct we can create a struct, containing these fields.

from construct import *

c = Struct('OPC UASC OpenSecureChannel Request',

            String('MessageType', 3),
            String('IsFinal', 1),
            ULInt32('MessageSize'),
            ULInt32('SecureChannelId'),
            PascalString('SecurityPolicyUri', length_field=ULInt32('length')),
            SLInt32('SenderCertificateLength'),
            Bytes('SenderCertificate', lambda ctx:ctx['SenderCertificateLength']),
            SLInt32('ReceiverCertificateThumbprintLength'),
            Bytes('ReceiverCertificateThumbprint', lambda ctx:ctx['ReceiverCertificateThumbprintLength']),
            ULInt32('SequenceNumber'),
            ULInt32('RequestId'),
            ULInt8('EncodingByte'),
            ULInt8('NameSpace'),
            ULInt16('Identifier'),
            ULInt8('AuthenticationTokenEncodingByte'),
            ULInt8('AuthenticationTokenIdentifier'),
            ULInt64('TimeStamp'),
            ULInt32('RequestHandle'),
            ULInt32('ReturnDiagnostics'),
            PascalString('AuditEntryId',
                         length_field=ULInt32('length'),
                         encoding='utf8'),
            ULInt32('TimeOutHint'),
            ULInt8('AHEncodingByte'),# AdditionalHeader
            ULInt8('AHIdentifier'),
            ULInt8('AHEncoding'),
            ULInt32('ProtocolVersion'),
            ULInt32('RequestType'),
            ULInt32('SecurityMode'),
            ULInt32('ClientNonce'),
            ULInt32('RequestedLifetime'),
        )

Snippets

[SecPol]The correct URL is something like: http://opcfoundation.org/UA/SecurityPolicy#None

Table Of Contents

Previous topic

Acknowledge

This Page