Archiv der Kategorie: Hardware

Meine kleinen Basteleien

Stromverbrauch von Switchen

In letzter Zeit hatte ich an diversen Stellen kurzfristig Netze umbauen müssen und daher diverse Switche in die Hand bekommen. Da ich bei meinem letzten Video doch etwas überrascht war, dass einige Switche einen sehr hohen Stromverbrauch zeigten hatte ich die Gelegenheit genutzt und bei verschiedensten Modellen im Fast-Leerlauf den Verbrauch gemessen und in eine Tabelle gepackt.

https://github.com/adlerweb/SwitchPower/

Yubikey: Nicht ganz unkaputtbar

tl;dr: YubiKeys nicht am Schlüsselbund festmachen

Wenn es um Security-Tokens geht, hat YubiCo mit seinem YubiKey klar die Nase vorn. Nicht zuletzt, da diese so ziemlich die ersten Geräte waren, welche die gängigsten Sicherheitsmechanismen in einem Gerät vereinen konnten. Vor allem U2F, TOTP (aka Google Authenticator) und PGP sind bei mir fast dauerhaft im Einsatz. Mit dieser Kombination kann ich 2-Faktor-Anmeldung auf Webseiten nutzen, E-Mails signieren und entschlüsseln, mich auf SSH-Servern anmelden und Zugriff auf lokale Dateien und Programme absichern. Auch Zertifikate, aka X.509, sind eine praktische Sache, können sie doch für Logins in Windows-Netzen, S/MIME oder das signieren von Dokumenten unter Windows genutzt werden. Zwar lassen sich all diese Mechanismen auch ohne Dongle nutzen, dieser bringt jedoch zwei wichtige Sicherheitsverbesserungen mit sich: Der Zugriff ist nur möglich, wenn das Gerät eingesteckt ist, sodass eine „versehentliche“ Nutzung erschwert wird. Zudem sind die privaten Schlüssel auf einem – vorzugsweise sicheren – Microcontroller gespeichert und können das Gerät nicht mehr verlassen.

Ich selbst bin Ende 2016 auf den YubiKey NEO * umgestiegen. Dieser kann per USB oder NFC genutzt werden. Letzteres ist z.B. für Logins oder Mailverkehr am Handy interessant. Etwas bedenken hatte ich, da USB-Sticks bei mir selten lange überleben und ein YK nicht gerade günstig ist. Das Werbesersprechen „unkaputtbar“, die robust aussehende Form und Empfehlungen aus dem Bekanntenkreis überzeugten jedoch am Ende. Seit dem ist er Stammgast an meinem Schlüsselbund, somit ständiger Begleiter und wird entsprechend viel genutzt.

YubiKey NEO an Schlüsselbund
YubiKey Neo an Schlüsselband

Schnellvorlauf November letzten Jahres, also 2 Jahre nach dem Kauf. Einiges hatte sich getan, aber der YK verrichtete noch anstandslos seine Dienste. Also fast. Von einem Tag auf den Anderen war NFC nicht mehr nutzbar und ich somit auf die Nutzung am PC beschränkt. Kein Beinbruch, Handy-Logins nutze ich eher selten, allerdings auch kein Pluspunkt für mein Vertrauen in die Haltbarkeit. Ich vermutete einen Softwarefehler, alternativ eine Einwirkung durch statische Aufladung. Beides Dinge, die nicht passieren sollten. Auch sonst zeigten sich Schwächen: Aus Sicherheitsgründen ist es nicht möglich die Firmware der Geräte zu aktualisieren. Hierdurch war ich bei PGP auf Keys mit maximal 2048 Bit limitiert. Noch OK, aber auch nicht toll. Einzige Möglichkeit auch in den Genuss neuerer Verfahren zu kommen wäre ein neueres Modell, diese hatten zum damaligen Zeitpunkt jedoch kein NFC und nutzten für PGP nun statt einer Open-Source-Lösung eine Eigenentwicklung des Herstellers, welcher sich nicht einsehen ließ.

Meh. Roughly 2 years after I bought my @yubico #Yubikey Neo it already failed. USB luckily still OK, but NFC completely dead. Really hoped these things would be more durable :<

adlerweb|BitBastelei@adlerweb, 2018-11-21

Da die neueren Modelle für mich keine Option waren wandte ich mich via Twitter an den Hersteller. Unter „unkaputtbar“ verstehe ich etwas Anderes, als 2 Jahre und somit knapp über den regulären Gewährleistungen. Meine Intention: Ich wollte wissen was da schief gelaufen ist, ob es eventuell durch einen Reset o.Ä. behoben werden kann, wie man das verhindern kann und ob bei zukünftigen Modellen dieses Problem umgangen werden kann. Man verwies mich auf das Ticketsystem, antwortete dort jedoch nur mit Textblöcken. Nach meiner Info, dass ich die Diskusion in dem Fall für Sinnlos hielt bot man mir den Austausch gegen einen neuen Neo an. Da auf Grund der alternden PGP-Unterstützung und der unbekannten Fehlerursache das Modell eher auf meiner Abschussliste war lehnte ich dankend ab und nutzte mein Modell per USB weiter.

10 Monate später sprach mich ein Mitglied des lokalen Hackerspace auf den YubiKey an. Ein Arbeitskollege hätte da einen unschönen Ausfall mit seinem Key gehabt. Das ABS-Gehäuse wäre durch den Schlüsselring durchgescheuert und das Gerät hätte den Dienst versagt. Könnte das mit meinem Problem zu tun haben? Sure enough: Auch bei mir ist das Plastik im Bereich des Schlüsselrings schon sehr abgenutzt. Dass das ein technisches Problem verursachen könnte hatte ich gar nicht auf dem Schirm.

Abgenutzter Bereich am Schlüsselring-Loch eines YubiKey NEO

Zudem: ABS? Durchscheuern? Ich hatte vermutet, dass unter der Plastik-Packung noch ein Metallring eingearbeitet wäre, welche das ganze etwas verstärkt. Aber jetzt, wo ich das höre – hm, ja, da reflektiert ja etwas. Ein Blick unter dem Mikroskop verrät recht schnell, was mein NFC getötet hat: die Antenne ist um das Schlüsselring-Loch gelegt und inzwischen durchgescheuert. WTF.

Beschädigte NFC-Antenne an einem YubiKey NEO

Erinnert Ihr euch dran, dass ich ABS sagte? ABS kennt man ja auch von 3D-Druckern, hier ist es üblich mit Aceton das Plastik nach dem Druck anzulösen und zu glätten. Mit entsprechenden Konzentrationen kann man das Plastik aber auch einfach wegschmelzen. Exakt dies hat HexView mit einem YubiKey Neo gemacht, sodass sich das Innenleben in voller Pracht bewundern lässt. Glücklicherweise sieht es so aus, als ob hier wirklich nur die Antennen vorbeilaufen und ein Ausfall eher nicht wahrscheinlich ist. Trotzdem würde ich jedem mit YubiKey NEO raten, an dieser Stelle mit Aceton das Plastik anzulösen und mit mehr ABS oder gar einem Metallring zu verstärken um Ausfälle durch Abnutzung zu vermeiden.

Ich selbst bin etwa an selber Stelle wie vorher: Ich werde den NEO wohl weiter nutzen. Zwar hat man inzwischen den YubiKey 5 NFC * herausgebracht, welcher wieder NFC kann, auch längere Keys für PGP unterstützt und das bei mir ursächliche Schlüsselring-Loch verstärkt hat, allerdings sind mir sowohl die fehlenden Quellen als auch die unschöne Reaktion des Supports doch eher sauer aufgestoßen. Hätte man mir bei meiner Nachfrage geantwortet, dass es vermutlich ein bekanntes Problem wäre und man das in der nächsten Produktversion angehen würde – ich hätte sie vermutlich direkt nach dem Release hier liegen gehabt. Leider mangelt es aber auch an Konkurrenz. Viele Keys wie z.B. Thetis oder Googles TitanKey nutzen ausschließlich U2F. Toll für’s Web, aber meine Hauptanwendung ist eher PGP. TOTP sucht man bei allen vergeblich, ließe sich mit etwas Gebastel aber halbwegs brauchbar in Software nachbilden – freie Standards haben so ihre Vorteile. Etwas besser sieht es bei NitroKey aus, hier ist GPG, TOTP und X.509 verfügbar. Leider ist U2F nur als separates Gerät erhältlich und TOTP mit 15 Einträgen etwas knapp (YubiKey Neo 28, YubiKey 5: 32). Da es sich um einen freien Algorithmus handelt könnte man aber, zumindest bei der TOTP-Limitierung, mit etwas Software nachhelfen. Ein Auge habe ich zudem noch auf Somu. Dieses Crowdfunding-Projekt dreht sich primär um einen U2F und FIDO2-Stick, als Stretch-Goal hat man jedoch GPG und SSH auf dem Plan. Alles soll am Ende Open Source sein, was sich auch eher positiv anhört. Ob sie am Ende liefern können, was sie versprechen, werde ich dann ja sehen.

In eine vorherigen Variante des Artikels wurde angegeben, dass NitroKey kein TOTP könne. Dies ist nicht korrekt, sowohl Nitrokey Pro 2 und Nitrokey Storage 2 können jeweils 15 TOTP-Einträge speichern.

Sound Blaster Roar 2 öffnen

Sound Blaster Roar 2, Schwarz, Vorderseite

Der Sound Blaster Roar 2 von Creative ist ein tragbarer Lautsprecher mit Bluetooth (aptX), USB, Kartenleser, NFC, Akku, Powerbankfunktion und allem anderen technischen Schnickschnack, den man eventuell brauchen könnte.

Sound Blaster Roar 2, Schwarz, Anschlüsse und erweitertes Bedienfeld mit defekter Strombuchse

Ein solcher ist beim hiesigen Reparaturcafe aufgeschlagen. Durch einen Sturz waren Stecker des 15V/1.xA-Netzteils und Buchse im Gerät beschädigt – wohl etwas zu viel Bass. Bei einem aktuellen Preis von 125€ (Werbung: Produkt auf Amazon*) ist ein Austausch lohnenswert, jedoch hat das Öffnen etwas Kreativität abverlangt. Also mal schnell zusammengefasst, wie man an das Innere gelangt.

Wichtig: Da ein Akku verbaut ist sollte man beim Arbeiten besonders vorsichtig sein – ein kurzgeschlossener Li-Ion ist nichts, was man auf dem Basteltisch haben möchte.

Sound Blaster Roar 2, Abgenommene Frontplatte und Lautsprecherabdeckung. Positionen der Schrauben aus dem Gedächtnis markiert

Im ersten Schritt nimmt man die silberne Abdeckung über den Tasten ab. Auch wenn sie sich wehrt: sie ist nur geklebt. Darunter finden sich, neben einigen Tastern und dem Gesteckten LED/NFC-Modul, drei Schrauben um auch das darunterliegende Drahtgitter zu entfernen. zum Vorschein kommen drei Lautsprecher, die Äußeren sind mit etwas Schaumstoff abgedeckt. Alle Bauteile sind mit selbstklebenden Schaumstoffstreifen als Dichtung versehen um den innen entstehenden Luftdruck auf die seitlichen „Bassboxen“ zu leiten. Durch etwas Suchen lassen sich unter den seitlichen Dichtungen die Schrauben zum letztendlichen Öffnen des Gehäuses lokalisieren. Vorsicht: Hier sind zum Teil unterschiedliche Typen verbaut, also Besser die Quelle der Schrauben markieren.

Sound Blaster Roar 2, Hauptplatine

Im Inneren findet sich eine Hauptplatine, welche nahezu alle Funktionen abdeckt. Der Akku, bestehend aus zwei 18650-Zellen, ist an der Vorderseite verklebt. Die vielen Kabel zwischen PCB und Perepherie scheinen alle gesteckt. Glücklicherweise sind sie lang genug, um auch ohne vollständiges Zerlegen Zugang zu den Komponenten und Schrauben zu erhalten.

Etwas ungewöhnlich ist der Bereich um die Anschlüsse herum: Dort findet sich eine weitere Plastikabdeckung, welche sowohl innen als auch außen verschraubt ist. Zusammen mit einer weitere Schaumstofftichtung sogt diese dafür, dass auch hier kein Druck aus dem Gehäuse entweicht.

Sound Blaster Roar 2, Defekte Strombuchse

Ist auch dieses Hindernis verschwunden erhält man Schlussendlich Zugang zu den Anschlüssen. In diesem Fall wurde die Buchse zur Stromversorgung so nach oben gehebelt, dass im hinteren Bereich eine Metallverbindung abgerissen war. Da die Buchse sonst keine Schäden zeigte und das Layout keine großen Hoffnungen auf eine einfache Ersatzteilbeschaffung machte wurde die schadhafte Stelle einfach zurück gebogen und verlötet.

Da leider kein passender Stecker für das Netzteil zur Hand war konnte ich keinen Abschließenden Test durchführen. Der verwendete Stecker scheint etwas ungewöhnlicher zu sein, die meisten mit diesem Außendurchmesser haben einen kleineren Stift in der Mitte. Ich vermute, dass es durch die Reparatur zu einer Verschlechterung der Audioqualität kommen könnte, da die Dichtungen an einigen Stellen geöffnet wurden. Im Zweifel sollte etwas neuer Schaumstoff oder auch Silikon an den betroffenen Stellen Abhilfe schaffen.

Arch Linux / Arduino: libtinfo.so.5 fehlt

Bild: https://www.adlerweb.info/blog/wp-content/uploads/2017/02/archarduino-300×58.pngBei der Nutzung der Arduino-IDE kommt es zur Zeit unter Arch Linux zu Problemen in Zusammenhang mit AVR-Boards. Ursache ist, dass Arduino seit einigen Versionen nicht mehr die Tools des System nutzt, sondern auf vorkompilierte Binärdateien setzt. Diese Alles-dabei-Conteiner versprechen auf den ersten Blick eine Vereinfachung, fliegt aktuell leider etwas auseinander: Die beigelegten Programme sind an vielen Stellen gegen überholte Bibliotheken gebaut. Dies verschafft zwar Kompatibilität mit trägen Systemen wie z.B. Debian, macht eine Nutzung mit aktuellen Systemen umständlich.

Schaut man sich die Fehlermeldung genauer an findet man schnell heraus, dass der beigelegte avrdude die Probleme auslöst:

avrdude: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or director

Libtinfo wurde zwischenzeitlich wohl in Ncurses übernommen, zudem benötigt Arduino/avrdude eine ältere, normalerweise nicht mehr installierte API der ncurses-Library.

Wer die Libraries passend haben möchte muss zuerst ncurses5-compat-libs installieren um die alten API-Versionen nachzurüsten, im Anschluss sorgt das Dummy-Paket libtinfo dafür die alten Dateinamen auf ncurses umzubiegen.

YubiKey: GPG-Kartenfehler / Sharing Violation unter Windows

Ugh – Windows und Sicherheitsfunktionen passt irgendwie immer noch nicht zusammen. Schon länger nutze ich einen YubiKey als GPG-Smartcard um E-Mails zu signieren und entschlüsseln. Das funktionierte mit GPG4Win und Thunderbird bisher auch recht brauchbar – also bis auf den Windows-GPG-Agent-Bug.

Wie gesagt: Bisher. Heute dann ein etwas seltsamer Bug:

# gpg --card-status
gpg: selecting openpgp failed: Card error
gpg: OpenPGP card not available: Card error

Wat. Schnell nochmal den Daemon durchstarten: Nix. Im Log findet man folgende Info:

scdaemon: pcsc_connect failed: sharing violation (0x8010000b)
scdaemon: reader slot 0: not connected

Bild: https://www.adlerweb.info/blog/wp-content/uploads/2017/02/wp-1485952629803-300×225.jpgWait. Sharing violation? Greift sonst noch wer zu? Jepp, natürlich tut das Jemand. Ich hatte zwischenzeitlich auf dem YubiKey für ein anderes System X.509-Zertifikate (aka PIV) eingerichtet. Diese kommen z.B. zur Authentifizierung zum Einsatz und können unter Windows auch z.B. für Remote-Logins und das entschlüsseln von Bitlocker-Festplatten verwendet werden. Entsprechend hat nun also auch Windows die PIV-Smartcard gefunden und belagert das Device dauerhaft – somit ist der Zugriff für gpg nicht mehr möglich. Abhilfe schafft hier den Dienst „CertPropSvc“ (aka „Zertifikatverteilung“) zu beenden bzw. neuzustarten. In letzterem Fall bleibt das Gerät frei bis man die nächste Software mit PIV-Zugriff (z.B. Remotedesktop) startet.

Also als weiterer Punkt auf dem nicht enden wollenden Wunschzettel für einen würdigen Nachfolger für die leider sicherheitstechnisch bedenklich gewordenen YubiKeys: Parallelität der SC-Reader…

FRITZ!Box per Konsole auslesen (PHP/TR64)

Statistiken sind toll. Wäre fein, wenn man auch der FRITZ!Box einiges entlocken könnte. Das Zauberwort lautet TR64 und ist über HTTP/SOAP im LAN erreichbar. Hierzu müssen in den Netzwerkeinstellungen die Anwendungszugriffe und Statusinformationen aktiv sein.

Bild: https://www.adlerweb.info/blog/wp-content/uploads/2017/01/fbox-300×137.png

Allgemeine Infos wie die aktuell verwendete Bandbreite lassen sich von jedem Abrufen, andere Bereiche konnte ich bisher nur über /control abrufen – hier werden die Zugangsdaten eines FB-Nutzers benötigt.

Über das Protokoll lassen sich neben IP, Verbindungsstatus und Bandbreiten auch erweiterte Infos wie Dämpfungen & Co aufzeichnen. Technisch kann man sogar Aktionen wie einen Reconnect oder komplette Konfigurationsänderungen durchführen, das würde hier jedoch den Rahmen sprengen. Einige Infos gibt es in der Wiki von WeHaveMoreFun oder das ausgiebigere Perl-Modul von FHem.

Hier mal mein Notizzettel, welcher eine Abfrage per PHP erlaubt:

<?php



function FbSOAP($url, $urn, $method='GetInfo', $user='', $pass='') {
    $parameter = array(
        'location'   => $url,
        'uri'        => $urn,
        'noroot'     => True
    );

    if($user != '') $parameter['login'] = $user;
    if($pass != '') $parameter['password'] = $pass;

    $client = new SoapClient(
        null,
        $parameter
    );
    $status = $client->$method();
    return $status;
}

$host = 'http://fritz.box:49000';
$user = 'nutzer';
$pass = 'geheim';

//Aktuell verwendete Bandbreite, Traffic seit Boot, DNS-Konfiguration (kein Passwort nötig)
var_dump(FbSOAP($host.'/igdupnp/control/WANCommonIFC1', 'urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1', 'GetAddonInfos'));

/*
  ["NewByteSendRate"]=>
  string(5) "20709"
  ["NewByteReceiveRate"]=>
  string(5) "21372"
  ["NewPacketSendRate"]=>
  string(1) "0"
  ["NewPacketReceiveRate"]=>
  string(1) "0"
  ["NewTotalBytesSent"]=>
  string(9) "986828869"
  ["NewTotalBytesReceived"]=>
  string(10) "1140825575"
  ["NewAutoDisconnectTime"]=>
  string(1) "0"
  ["NewIdleDisconnectTime"]=>
  string(2) "30"
  ["NewDNSServer1"]=>
  string(14) "217.237.15.1"
  ["NewDNSServer2"]=>
  string(14) "217.237.14.2"
  ["NewVoipDNSServer1"]=>
  string(14) "217.237.15.1"
  ["NewVoipDNSServer2"]=>
  string(14) "217.237.14.2"
  ["NewUpnpControlEnabled"]=>
  string(1) "0"
  ["NewRoutedBridgedModeBoth"]=>
  string(1) "1"
*/

//Verbindungsstatus und Typ (kein Passwort nötig)
var_dump(FbSOAP($host.'/igdupnp/control/WANCommonIFC1', 'urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1', 'GetCommonLinkProperties'));

/*
Achtung - MaxBitRate ist nicht konsistent

array(4) {
  ["NewWANAccessType"]=>
  string(3) "DSL"
  ["NewLayer1UpstreamMaxBitRate"]=>
  string(7) "1073000"
  ["NewLayer1DownstreamMaxBitRate"]=>
  string(7) "2304000"
  ["NewPhysicalLinkStatus"]=>
  string(2) "Up"
}
*/

//DSL-Sync-Status, DSL-Datenraten und Dämpfungen
var_dump(FbSOAP($host.'/upnp/control/wandslifconfig1', 'urn:dslforum-org:service:WANDSLInterfaceConfig:1', 'GetInfo', $user, $pass));

/*
array(15) {
  ["NewEnable"]=>
  string(1) "1"
  ["NewStatus"]=>
  string(2) "Up"
  ["NewDataPath"]=>
  string(11) "Interleaved"
  ["NewUpstreamCurrRate"]=>
  string(3) "224"
  ["NewDownstreamCurrRate"]=>
  string(4) "2304"
  ["NewUpstreamMaxRate"]=>
  string(4) "1196"
  ["NewDownstreamMaxRate"]=>
  string(4) "4736"
  ["NewUpstreamNoiseMargin"]=>
  string(3) "270"
  ["NewDownstreamNoiseMargin"]=>
  string(3) "130"
  ["NewUpstreamAttenuation"]=>
  string(3) "290"
  ["NewDownstreamAttenuation"]=>
  string(3) "490"
  ["NewATURVendor"]=>
  string(8) "41564d00"
  ["NewATURCountry"]=>
  string(4) "0400"
  ["NewUpstreamPower"]=>
  string(3) "502"
  ["NewDownstreamPower"]=>
  string(3) "500"
}
*/

//DSL-Fehlerstatistiken
var_dump(FbSOAP($host.'/upnp/control/wandslifconfig1', 'urn:dslforum-org:service:WANDSLInterfaceConfig:1', 'GetStatisticsTotal', $user, $pass));

/*
array(15) {
  ["NewReceiveBlocks"]=>
  string(1) "0"
  ["NewTransmitBlocks"]=>
  string(1) "0"
  ["NewCellDelin"]=>
  string(1) "0"
  ["NewLinkRetrain"]=>
  string(1) "9"
  ["NewInitErrors"]=>
  string(1) "0"
  ["NewInitTimeouts"]=>
  string(1) "0"
  ["NewLossOfFraming"]=>
  string(1) "0"
  ["NewErroredSecs"]=>
  string(3) "637"
  ["NewSeverelyErroredSecs"]=>
  string(2) "54"
  ["NewFECErrors"]=>
  string(7) "3932348"
  ["NewATUCFECErrors"]=>
  string(1) "9"
  ["NewHECErrors"]=>
  string(4) "7289"
  ["NewATUCHECErrors"]=>
  string(2) "10"
  ["NewCRCErrors"]=>
  string(4) "1635"
  ["NewATUCCRCErrors"]=>
  string(2) "13"
}
*/

//Gerätemodell, Softwareversion, Seriennummer, Logfile
var_dump(FbSOAP($host.'/upnp/control/deviceinfo', 'urn:dslforum-org:service:DeviceInfo:1', 'GetInfo', $user, $pass));

/*
array(12) {
  ["NewManufacturerName"]=>
  string(3) "AVM"
  ["NewManufacturerOUI"]=>
  string(6) "00040E"
  ["NewModelName"]=>
  string(28) "FRITZ!Box Fon WLAN 7390 (UI)"
  ["NewDescription"]=>
  string(37) "FRITZ!Box Fon WLAN 7390 (UI) 84.06.51"
  ["NewProductClass"]=>
  string(9) "FRITZ!Box"
  ["NewSerialNumber"]=>
  string(12) "C02506210000"
  ["NewSoftwareVersion"]=>
  string(8) "84.06.51"
  ["NewHardwareVersion"]=>
  string(28) "FRITZ!Box Fon WLAN 7390 (UI)"
  ["NewSpecVersion"]=>
  string(3) "1.0"
  ["NewProvisioningCode"]=>
  string(0) ""
  ["NewUpTime"]=>
  string(7) "2375523"
  ["NewDeviceLog"]=>
  string(15974) "03.01.17 02:32:46 Internetverbindung wurde erfolgreich hergestellt. IP-Adresse: xxxx, DNS-Server: 217.237.150.xx und 217.237.148.xx, Gateway: 87.186.225.xx, Breitband-PoP: xxx05-asr
03.01.17 02:32:46 Internetverbindung wurde getrennt.
03.01.17 02:32:43 Die Internetverbindung wird kurz unterbrochen, um der Zwangstrennung durch den Anbieter zuvorzukommen.
…
*/

//Software-Update verfügbar?
var_dump(FbSOAP($host.'/upnp/control/userif', 'urn:dslforum-org:service:UserInterface:1', 'GetInfo', $user, $pass));
/*
array(9) {
  ["NewUpgradeAvailable"]=>
  string(1) "0"
  ["NewPasswordRequired"]=>
  string(1) "0"
  ["NewPasswordUserSelectable"]=>
  string(1) "1"
  ["NewWarrantyDate"]=>
  string(19) "0001-01-01T00:00:00"
  ["NewX_AVM-DE_Version"]=>
  string(0) ""
  ["NewX_AVM-DE_DownloadURL"]=>
  string(0) ""
  ["NewX_AVM-DE_InfoURL"]=>
  string(0) ""
  ["NewX_AVM-DE_UpdateState"]=>
  string(8) "NoUpdate"
  ["NewX_AVM-DE_LaborVersion"]=>
  string(0) ""
}
*/

//WLAN-Konfiguration und Status
var_dump(FbSOAP($host.'/upnp/control/wlanconfig1', 'urn:dslforum-org:service:WLANConfiguration:1', 'GetInfo', $user, $pass));

/*
array(17) {
  ["NewEnable"]=>
  string(1) "0"
  ["NewStatus"]=>
  string(8) "Disabled"
  ["NewMaxBitRate"]=>
  string(4) "Auto"
  ["NewChannel"]=>
  string(2) "13"
  ["NewSSID"]=>
  string(17) "ADLERWEB-TEST"
  ["NewBeaconType"]=>
  string(3) "11i"
  ["NewMACAddressControlEnabled"]=>
  string(1) "0"
  ["NewStandard"]=>
  string(1) "n"
  ["NewBSSID"]=>
  string(17) "C0:25:06:00:00:00"
  ["NewBasicEncryptionModes"]=>
  string(4) "None"
  ["NewBasicAuthenticationMode"]=>
  string(4) "None"
  ["NewMaxCharsSSID"]=>
  string(2) "32"
  ["NewMinCharsSSID"]=>
  string(1) "1"
  ["NewAllowedCharsSSID"]=>
  string(95) "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
  ["NewMinCharsPSK"]=>
  string(2) "64"
  ["NewMaxCharsPSK"]=>
  string(2) "64"
  ["NewAllowedCharsPSK"]=>
  string(22) "0123456789ABCDEFabcdef"
}
*/

//DSL-Status und Konfiguration
var_dump(FbSOAP($host.'/upnp/control/wandsllinkconfig1', 'urn:dslforum-org:service:WANDSLLinkConfig:1', 'GetInfo', $user, $pass));

/*
array(9) {
  ["NewEnable"]=>
  string(1) "1"
  ["NewLinkStatus"]=>
  string(2) "Up"
  ["NewLinkType"]=>
  string(5) "PPPoE"
  ["NewDestinationAddress"]=>
  string(9) "PVC: 1/32"
  ["NewATMEncapsulation"]=>
  string(3) "LLC"
  ["NewAutoConfig"]=>
  string(1) "0"
  ["NewATMQoS"]=>
  string(3) "UBR"
  ["NewATMPeakCellRate"]=>
  string(1) "0"
  ["NewATMSustainableCellRate"]=>
  string(1) "0"
}
*/

//DSL-Statistiken
var_dump(FbSOAP($host.'/upnp/control/wandsllinkconfig1', 'urn:dslforum-org:service:WANDSLLinkConfig:1', 'GetStatistics', $user, $pass));

/*
array(4) {
  ["NewATMTransmittedBlocks"]=>
  string(1) "0"
  ["NewATMReceivedBlocks"]=>
  string(1) "0"
  ["NewAAL5CRCErrors"]=>
  string(1) "0"
  ["NewATMCRCErrors"]=>
  string(1) "0"
}
*/

//PPP-Status (incl. externer IP!)
var_dump(FbSOAP($host.'/upnp/control/wanpppconn1', 'urn:dslforum-org:service:WANPPPConnection:1', 'GetInfo', $user, $pass));

/*
BitRate auch hier nicht nachvollziehbar

array(31) {
  ["NewEnable"]=>
  string(1) "1"
  ["NewConnectionStatus"]=>
  string(9) "Connected"
  ["NewPossibleConnectionTypes"]=>
  string(21) "IP_Routed, IP_Bridged"
  ["NewConnectionType"]=>
  string(9) "IP_Routed"
  ["NewName"]=>
  string(8) "internet"
 ["NewUptime"]=>
  string(5) "57428"
  ["NewUpstreamMaxBitRate"]=>
  string(7) "1083169"
  ["NewDownstreamMaxBitRate"]=>
  string(7) "4289207"
  ["NewLastConnectionError"]=>
  string(10) "ERROR_NONE"
  ["NewIdleDisconnectTime"]=>
  string(1) "0"
  ["NewRSIPAvailable"]=>
  string(1) "0"
  ["NewUserName"]=>
  string(40) "deineid@t-online.de"
  ["NewNATEnabled"]=>
  string(1) "1"
  ["NewExternalIPAddress"]=>
  string(13) "91.35.130.0"
  ["NewDNSServers"]=>
  string(30) "217.237.150.0, 217.237.148.0"
  ["NewMACAddress"]=>
  string(17) "C0:25:06:00:00:00"
  ["NewConnectionTrigger"]=>
  string(8) "AlwaysOn"
  ["NewLastAuthErrorInfo"]=>
  string(0) ""
  ["NewMaxCharsUsername"]=>
  string(3) "128"
  ["NewMinCharsUsername"]=>
  string(1) "3"
  ["NewAllowedCharsUsername"]=>
  string(87) "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-._@()#/%[]{}*+§$&=?!:;,"
  ["NewMaxCharsPassword"]=>
  string(2) "64"
  ["NewMinCharsPassword"]=>
  string(1) "3"
  ["NewAllowedCharsPassword"]=>
  string(87) "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-._@()#/%[]{}*+§$&=?!:;,"
  ["NewTransportType"]=>
  string(5) "PPPoE"
  ["NewRouteProtocolRx"]=>
  string(3) "Off"
  ["NewPPPoEServiceName"]=>
  string(0) ""
  ["NewRemoteIPAddress"]=>
  string(0) ""
  ["NewPPPoEACName"]=>
  string(10) "xxxx05-asr"
  ["NewDNSEnabled"]=>
  string(1) "1"
  ["NewDNSOverrideAllowed"]=>
  string(1) "1"
}

*/


?>

 

HTTPS mit signierten Zertifikaten auf HP/HPE/Procurve/Aruba/Procurve-Switchen

HTTPS, vorzugsweise mit gültigen Zertifikaten, sollte heute eigentlich Standard sein – erst recht wenn man mehr oder weniger kritische Infrastrukturen darüber verwalten möchte. Auch wenn ich eher ein Verfechter von SSH bei der Konfiguration von Switchen bin, so wird doch oft auch ein Webinterface gefordert. Bei HP/HPE/Aruba/Procurve ist dies in der Standardkonfiguration unverschlüsselt per HTTP erreichbar. HTTPS lässt sich aktivieren, die Einrichtung von etwas anderem als self-signed ist jedoch leider nicht so intuitiv wie ich das gerne hätte. Also gehen wir die Schritte mal durch. Im CLI natürlich.

Erst muss ein „Trust Anchor“ erstellt werden. Dies ist sozusagen die Zertifikatsdatenbank des Switches. Da mehrere vorhanden sein können wird er mit einem aussagekräftigem Namen (her „MEINNETZ„) versehen.

# crypto pki ta-profile MEINNETZ

Anschließend wird das Zertifikat der Zertifizierungsstelle (CA) importiert. Leider ist dies bei vielen  Geräten nur per TFTP und nicht über USB-Stick, Terminal  o.Ä. möglich. Auch dieses bekommt zur besseren Auffindbarkeit einen Namen (hier „MYCA„). Die angegebene IP entspricht der des TFTP-Servers, unter Windows lässt sich hierzu z.B. TFTPD32 nutzen. Der Switch selbst muss hierfür natürlich bereits eine passende Netzwerkkonfiguration besitzen und den PC erreichen können, ohne passende Konfiguration sucht er sich eine Adresse per DHCP auf dem Standard-VLAN.

# copy tftp ta-certificate MYCA 192.168.0.123 meineca.crt

Im Anschluss kann die Zertifikatsunterschriftanfrage (CSR) generiert werden. Wichtig für ein gültiges Zertifikat ist hierbei im Feld „common-name“ den späteren Hostname oder die IP-Adresse des Switches anzugeben, welche letztendlich für das Management verwendet werden soll..

# crypto pki create-csr certificate-name HTTPS ta-profile MEINNETZ usage web key-type rsa key-size 2048 subject common-name switch123.adlerweb.local org "BitBastelei" org-unit "IT" locality "Koblenz" state RLP country DE

Zu beachten ist, dass je nach Modellgeneration die Verfügbaren Cryptomethoden limitiert sein können. Das hier genutzte Modell unterstützt so leiglich RSA-Schlüssel mit bis zu 2048 Bit. Die verfügbaren Optionen lassen sich wie immer durch „?“ abrufen. Das Erstellen kann je nach verbautem Managementprozessor einige Zeit in Anspruch nehmen, im Anschluss erscheint die Anfrage als Text.

-----BEGIN CERTIFICATE REQUEST-----
MIICzDCCAbQCAQAwgYYxCzAJBgNVBAYTAkVOMQ0wCwYDVQQIDARub25lMQ0wCwYD
VQQHDARub25lMRIwEAYDVQQKDAlXaWtpcGVkaWExDTALBgNVBAsMBG5vbmUxGDAW
BgNVBAMMDyoud2lraXBlZGlhLm9yZzEcMBoGCSqGSIb3DQEJARYNbm9uZUBub25l
LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMP/U8RlcCD6E8AL
PT8LLUR9ygyygPCaSmIEC8zXGJung3ykElXFRz/Jc/bu0hxCxi2YDz5IjxBBOpB/
kieG83HsSmZZtR+drZIQ6vOsr/ucvpnB9z4XzKuabNGZ5ZiTSQ9L7Mx8FzvUTq5y
/ArIuM+FBeuno/IV8zvwAe/VRa8i0QjFXT9vBBp35aeatdnJ2ds50yKCsHHcjvtr
9/8zPVqqmhl2XFS3Qdqlsprzbgksom67OobJGjaV+fNHNQ0o/rzP//Pl3i7vvaEG
7Ff8tQhEwR9nJUR1T6Z7ln7S6cOr23YozgWVkEJ/dSr6LAopb+cZ88FzW5NszU6i
57HhA7ECAwEAAaAAMA0GCSqGSIb3DQEBBAUAA4IBAQBn8OCVOIx+n0AS6WbEmYDR
SspR9xOCoOwYfamB+2Bpmt82R01zJ/kaqzUtZUjaGvQvAaz5lUwoMdaO0X7I5Xfl
sllMFDaYoGD4Rru4s8gz2qG/QHWA8uPXzJVAj6X0olbIdLTEqTKsnBj4Zr1AJCNy
/YcG4ouLJr140o26MhwBpoCRpPjAgdYMH60BYfnc4/DILxMVqR9xqK1s98d6Ob/+
3wHFK+S7BRWrJQXcM8veAexXuk9lHQ+FgGfD0eSYGz0kyP26Qa2pLTwumjt+nBPl
rfJxaLHwTQ/1988G0H35ED0f9Md5fzoKi5evU1wG5WRxdEUPyt3QUXxdQ69i0C+7
-----END CERTIFICATE REQUEST-----

Diese Anfrage kopiert man aus dem Terminal und reicht sie als .csr-Datei an die gewünschte Zertifizierungsstelle weiter bzw. signiert diesen selbst mit seiner lokalen CA. Als Ergebnis erhält man ein Zertifikat, üblicherweise im PEM-Format (meist .pem oder .crt), welches im Switch importiert werden muss. Erhält man stattdessen eine DER oder P7B-Datei kann diese an einem PC z.B. mit openssl konvertiert werden. Nach Eingabe des Importbefehls erwartet der Switch den Inhalt der PEM-Datei als Texteingabe. Unter Windows mit PuTTy kann mit einem Rechtsklick eingefügt werden.

# crypto pki install-signed-certificate
Paste the certificate here and enter:
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

Mit Erkennen der „END CERTIFICATE„-Zeile kehrt der Switch automatisch zur Konfigurationsoberfläche zurück.  Das Zertifikat sollte nun in der Liste der installierten Zertifikate zu sehen sein.

# show crypto pki local-certificate
Name Usage Expiration Parent / Profile
-------------------- ------------- -------------- --------------------
HTTPS Web 2345/06/07 MEINNETZ

Zuletzt wird HTTPS ein- und HTTP ausgeschaltet. Das zuvor installierte und somit einzige Zertifikat sollte automatisch verwendet werden.

# web-management ssl
# no web-management plaintext

Somit ist der Switch nicht mehr unverschlüsselt verwaltbar und die zuständigen „Administratoren“ teilen ihr Passwort nicht mehr zwangsläufig allen Lauschern im Netz servierfertig mit. Mit etwas Glück spart das Ganze am Ende mehr Arbeit als das turnusmäßige Auffrischen der Zertifikate verursacht. Wenn nicht schont der nicht mehr vorhandene HTTP-Login  immerhin meine Nerven.

BitBastelei #196 – YL LED Deckenpanel

BitBastelei #196 - YL LED Deckenpanel

(158 MB) 00:25:56

2016-05-08 10:00 🛈
Wieder mal Zeit für eine Erleuchtung: Für einen Raum war ich auf der Suche nach Deckenlampen in LED-Technik, welche sich auch mit 12V betreiben lassen. Fertige Systeme konnte ich nicht finden, der Händler YL LED Lighting Factory war jedoch in der Lage mir vor dem Kauf alle nötigen Daten für einen Umbau zu liefern. Das bestellte Modell ist mit 9W ausgezeichnet, gibt ein kaltweißes Licht (6000K) ab und soll einen hohen CRI besitzen – für ca. 7,50€ incl. passendem 230V-Treiber ist sie zudem vergleichsweise günstig.

Bild: https://www.adlerweb.info/blog/wp-content/uploads/2016/05/UT8NVr4Xp8aXXagOFbXS-300×225.jpg

Ausflug Farbwiedergabeindex (CRI, Colour Rendering Index)

Licht ist nicht gleich Licht – viele Lichtquellen haben einen gewissen Farbstich, welcher die Farbwahrnehmung verändert, oder beleuchten Farben nicht gleichmäßig. Als Ideallicht wird meist die Sonne herangezogen. Glühlampen zeigen Farben eher rötlich, sind jedoch auch sehr gleichmäßig was die Beleuchtungsstärke angeht. Deutlich schlechteres Licht haben viele Energiesparlampen, deren Quecksilber sorgt nur in kleinen Farbstreifen für gute Beleuchtung – Farben, welche dazwischen liegen sind nur schwer zu erkennen.  Meist erscheint alles eher Grün-Blau und Farben sehen verwaschen aus. Weiße LEDs bestehen gängigerweise aus einer blauen Grundfarbe, welche durch eine Phosphorschicht auf den restlichen Bereich verteilt wird. Gerade bei günstigen Lampen ist jedoch der blaue Grundton noch gut erkennbar. Da Rot hier meist nur dürftig abgegeben wird erscheinen alle Farben eher bläulich. Der CRI gibt an wie gleichmäßig die Beleuchtung der einzelnen Farben im vergleich zum Sonnenlicht erfolgt.

Bild: https://www.adlerweb.info/blog/wp-content/uploads/2016/05/cri-300×169.png

Ausflug Farbtemperaturen

Wie bereits bei CRI beschrieben haben einige Lichtquellen einen „Farbstich“, dieser wird mit der Farbtemperatur in Grad Kelvin angegeben. Für das Auge erscheinen höhere Farbtemperaturen heller, aber auch steril und wenig einladend. Geringere Werte erscheien bei gleicher Lichtleistung dunkler, wirken dafür gemütlich. Die Sonne liegt tagsüber bei etwa 5500K, Glühlampen und Warmweiße LEDs liegen bei eher roten 3000K. Kaltweiße LEDs driften mit 6500K eher ins Bläuliche ab.

Bild: https://www.adlerweb.info/blog/wp-content/uploads/2016/05/kelvin-300×169.png

Aufbau des Panels

Bild: https://www.adlerweb.info/blog/wp-content/uploads/2016/05/UT8cu24Xt4aXXagOFbXN-300×225.jpg

Das LED-Panel ist als klassische „Side-Fire-LED“ aufgebaut: An den Rändern befindet sich ein LED-Streifen mit handelsüblichen SMD-LEDs. In der Mitte sorgt ein spezielles Plastik dafür das Licht möglichst gleichmäßig in Richtung Vorderseite zu reflektieren. Eine Diffusionsschicht aus milchigem Acrylglas sorgt zuem dafür, dass auch eine Abstrahlung zu den Seiten erfolgt und die Lampe nicht wie ein Richtstrahler erscheint.

Bild: https://www.adlerweb.info/blog/wp-content/uploads/2016/05/sidefire-300×169.png

Zur Verbindung der Stromversorgung steht ein 5.5×2.1er Hohlstecker zur Verfügung, welcher durch einen Drehmechanismus vor versehentlichem Auseinanderziehen geschützt wird. Die Ansteuerung erfolgt mit 300mA, die Spannung pendelt sich im Betrieb bei etwa 28V ein. Nach einer Stunde Betrieb auf dem Schreibtisch lag die Temperatur stabil bei ca. 18°C über der Umgebungstemperatur.

Die Lichtausbeute erscheint mir optisch etwas über der einer 60W-Glühlampe zu liegen, die Farbwiedergabe erscheint, wie von  6000K zu erwarten, leicht bläulich, jedoch soweit akzeptabel.

Das nötige Loch zum Deckeneinbau ist mit 13.5×13.5cm vorzusehen, incl. Rahmen erreicht das Modul knapp unter 15x15cm und ist incl. Federn und Kabeldurchführungen ca. 2.5cm tief.

Aufbau des Treibers

Der beiliegende Treiber zur Verbindung des LED-Panels mit dem normalen Stromnetz stellt laut Angabe einen Konstantstromtreiber mit 300mA für 8-18W LEDs dar. Die weiterhin erwähnte Ausgangsspannung ist mit 60-90V angegeben, liegt bei diesem 9W-Modell jedoch bei etwa 30V. Wie stark sich diese Diskrepanz auf das Flachern am Wechselstromnetz auswirkt habe ich nicht getestet. Er ist vom Stromnetz nicht isoliert ausgeführt, hierdurch kann das Berühren der vermeintlich harmlosen Ausgangskabel ggf. schmerzhafte Folgen haben. Da die Ausgangsbuchsen mit einem breiten Plastikrand umgeben und normalerweise in der Decke angebracht sind, sollte dies im Normalbetrieb kein Problem darstellen – wer auf Nummer sicher gehen will sollte jedoch die Nutzung eines anderen Treibers in Erwägung ziehen.

Bild: https://www.adlerweb.info/blog/wp-content/uploads/2016/05/leddriver-300×113.png

Betrieb an 12V

Um das Panel an 12V zu betreiben sollte ein Schaltregler (Step-Up, Boost) mit Konstantstromfunktion zur Verfügung stehen. Leider sind diese Module nur schwer fertig zu finden, sodass man eine passende Schaltung vermutlich selbst bauen muss (Video folgt). Für Testzwecke kann auch ein eher verbreitetes Boost-Modul mit Konstantspannung verwendet werden, dies wird auf ca. 28V eingestellt. Die LED wird hierbei leicht unter der Maximalleistung betrieben, was optisch jedoch nur schwer zu unterscheiden ist. Da hierbei keine automatische Nachregelung erfolgt können Abweichungen durch Temperatur oder LED-Störungen das Panel ggf. zerstören, daher ist ein Konstantstromtreiber immer vorzuziehen.

Arduino: boolean vs. byte

Möchte man einen einfachen Status im an/aus-Format notieren ist üblicherweise ein Boolean der Dateityp der Wahl. Technisch gesehen unterstützt der bei Arduino verwendete ATMega jedoch immer nur 8-Bit-Register, sodass auch ein Boolean (1-Bit-Wert) intern meist als Byte (8-Bit-Wert) abgespeichert wird. Klingt nicht sehr effizient, aber kann man per Hand tatsächlich „besser“ arbeiten?

Gehen wir von einem einfachen Beispiel aus: Wir möchten mehrere dieser Zustände speichern und auf deren Basis eine Entscheidung treffen. Für dieses Beispiel wird der Wert immer invertiert – in diesem Fall könnte man es auch kompakter Lösen, aber da es nur als Platzhalter für komplexeren Code gilt lasse ich das mal so stehen. Alle Beispiele sind Auszüge eines größeren Programms, die absoluten Größen also ohne weitere Aussagekraft.

Erster Versuch: Mit Boolean

boolean dir1 = false;
boolean dir2 = false;
boolean dir3 = false;
//[...]
if(dir1) {
  //Aktionen
  dir1 = false;
}else{
  dir1 = true;
}

//23.644 Byte Flash, 1.537 Byte RAM

Zum Vergleich mit einem einzigen „byte“-Wert, dessen einzelne Bits als Informationsspeicher verwendet werden sollen:

byte dir = 0x00;
//[...]
if(dir & 0x01) {
  //Aktionen
  bitSet(dir, 0x01);
}else{
  bitClear(dir, 0x01);
}

//23.650 Byte Flash, 1.535 Byte RAM

Schaut man auf das eigentliche Programm gewinnt die Variante mit Boolean – 6 Byte kleiner. Nicht wirklich verwunderlich – hat man ein ganzes Byte müsste sich direkt ein Sprung bei !=0 durchführen lassen. Mit Byte-Teilen ist ein Vergleich oder ein vorheriges UND nötig, welches zusätzliche Befehle und somit auch Speicher und CPU-Takte verschlingt. Schaut man jedoch auf den RAM dreht sich das Bild: Hier ist das einzelne Byte sparsamer. 2 Byte kommen mir jedoch etwas klein vor – ich fürchte hier hat der Compiler mit seinen Optimierungen einiges der boolean-Logik geschmissen, denn theoretisch sollte zur ersten Variante deutlich mehr Abstand sein.

Wie auch immer: Selbst ohne große Analyse zeigt sich, was ich schon erwartet hatte: Boolean spart Flash, Byte spart RAM. Welche Variante die sinnvollere ist hängt letztendlich vom jeweiligen Projekt ab. Da mir der RAM ausging war die Umstellung auf Byte eine gute Möglichkeit etwas zu sparen. Möglicherweise hätte es auch gereicht den Compiler nicht mit -Os anzuweisen, einen möglichst kleinen Code zu generieren.

Arduino® Pro Mini Pinout Cheat-Sheet

Ich arbeite auf Grund des geringen Preises häufig mit Arduino®-kompatiblen Boards der „Pro Mini“-Serie. Leider sind die Pins auf diesen Boards nicht nach der CPU sondern dem Standard der Arduino-IDE beschriftet. Bisher nutzte ich diverse Pinout Cheat-Sheets aus dem Netz, jedoch haben viele dieser Diagramme vertauschte Pins, welches bei mir in den letzten Wochen zu einigen fehlerhaften Aufbauten führten. Lange Rede kurzer Sinn: Ich werfe ein weiteres Cheat-Sheet in den Raum – hoffentlich mit weniger fehlerhaft beschrifteten Pins. Wenn doch etwas auffällt: Die Kommentare sind offen.

Bild: https://www.adlerweb.info/blog/wp-content/uploads/2015/08/prominipinout-1.2-300×212.png
[DA]