SNMP v3: fix unsupported authentication and protocol versions
This commit is contained in:
parent
ed0a7d5adb
commit
9d1f162fa5
@ -127,7 +127,7 @@ public class SnmpTransportContext extends TransportContext {
|
|||||||
.build();
|
.build();
|
||||||
registerSessionMsgListener(sessionContext);
|
registerSessionMsgListener(sessionContext);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("Failed to establish session for SNMP device {}: {}", device.getId(), e.toString());
|
log.error("Failed to establish session for SNMP device {}", device.getId(), e);
|
||||||
transportService.errorEvent(device.getTenantId(), device.getId(), "sessionEstablishing", e);
|
transportService.errorEvent(device.getTenantId(), device.getId(), "sessionEstablishing", e);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -166,7 +166,7 @@ public class SnmpTransportContext extends TransportContext {
|
|||||||
log.trace("Configuration of the device {} was not updated", device);
|
log.trace("Configuration of the device {} was not updated", device);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("Failed to update session for SNMP device {}: {}", sessionContext.getDeviceId(), e.getMessage());
|
log.error("Failed to update session for SNMP device {}", sessionContext.getDeviceId(), e);
|
||||||
transportService.lifecycleEvent(sessionContext.getTenantId(), sessionContext.getDeviceId(), ComponentLifecycleEvent.UPDATED, false, e);
|
transportService.lifecycleEvent(sessionContext.getTenantId(), sessionContext.getDeviceId(), ComponentLifecycleEvent.UPDATED, false, e);
|
||||||
destroyDeviceSession(sessionContext);
|
destroyDeviceSession(sessionContext);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -72,11 +72,18 @@ public class SnmpAuthService {
|
|||||||
OctetString engineId = new OctetString(deviceTransportConfig.getEngineId());
|
OctetString engineId = new OctetString(deviceTransportConfig.getEngineId());
|
||||||
|
|
||||||
OID authenticationProtocol = new OID(deviceTransportConfig.getAuthenticationProtocol().getOid());
|
OID authenticationProtocol = new OID(deviceTransportConfig.getAuthenticationProtocol().getOid());
|
||||||
|
byte[] authenticationPassphrase = SecurityProtocols.getInstance().passwordToKey(authenticationProtocol,
|
||||||
|
new OctetString(deviceTransportConfig.getAuthenticationPassphrase()), engineId.getValue());
|
||||||
|
if (authenticationPassphrase == null) {
|
||||||
|
throw new UnsupportedOperationException("Authentication protocol " + deviceTransportConfig.getAuthenticationProtocol() + " is not supported");
|
||||||
|
}
|
||||||
|
|
||||||
OID privacyProtocol = new OID(deviceTransportConfig.getPrivacyProtocol().getOid());
|
OID privacyProtocol = new OID(deviceTransportConfig.getPrivacyProtocol().getOid());
|
||||||
OctetString authenticationPassphrase = new OctetString(deviceTransportConfig.getAuthenticationPassphrase());
|
byte[] privacyPassphrase = SecurityProtocols.getInstance().passwordToKey(privacyProtocol,
|
||||||
authenticationPassphrase = new OctetString(SecurityProtocols.getInstance().passwordToKey(authenticationProtocol, authenticationPassphrase, engineId.getValue()));
|
authenticationProtocol, new OctetString(deviceTransportConfig.getPrivacyPassphrase()), engineId.getValue());
|
||||||
OctetString privacyPassphrase = new OctetString(deviceTransportConfig.getPrivacyPassphrase());
|
if (privacyPassphrase == null) {
|
||||||
privacyPassphrase = new OctetString(SecurityProtocols.getInstance().passwordToKey(privacyProtocol, authenticationProtocol, privacyPassphrase, engineId.getValue()));
|
throw new UnsupportedOperationException("Privacy protocol " + deviceTransportConfig.getPrivacyProtocol() + " is not supported");
|
||||||
|
}
|
||||||
|
|
||||||
USM usm = snmpTransportService.getSnmp().getUSM();
|
USM usm = snmpTransportService.getSnmp().getUSM();
|
||||||
if (usm.hasUser(engineId, securityName)) {
|
if (usm.hasUser(engineId, securityName)) {
|
||||||
@ -84,8 +91,8 @@ public class SnmpAuthService {
|
|||||||
}
|
}
|
||||||
usm.addLocalizedUser(
|
usm.addLocalizedUser(
|
||||||
engineId.getValue(), username,
|
engineId.getValue(), username,
|
||||||
authenticationProtocol, authenticationPassphrase.getValue(),
|
authenticationProtocol, authenticationPassphrase,
|
||||||
privacyProtocol, privacyPassphrase.getValue()
|
privacyProtocol, privacyPassphrase
|
||||||
);
|
);
|
||||||
|
|
||||||
UserTarget userTarget = new UserTarget();
|
UserTarget userTarget = new UserTarget();
|
||||||
|
|||||||
@ -148,6 +148,7 @@ public class SnmpTransportService implements TbTransportService, CommandResponde
|
|||||||
snmp.addNotificationListener(transportMapping, transportMapping.getListenAddress(), this);
|
snmp.addNotificationListener(transportMapping, transportMapping.getListenAddress(), this);
|
||||||
snmp.listen();
|
snmp.listen();
|
||||||
|
|
||||||
|
SecurityProtocols.getInstance().addPredefinedProtocolSet(SecurityProtocols.SecurityProtocolSet.maxCompatibility);
|
||||||
USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0);
|
USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0);
|
||||||
SecurityModels.getInstance().addSecurityModel(usm);
|
SecurityModels.getInstance().addSecurityModel(usm);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user