info@yenlo.com
ned
Menu
WSO2 6 min

Een gecodeerd wachtwoord voor gegevensservices gebruiken

Rob Blaauboer
Rob Blaauboer
Integration Consultant & WSO2 Trainer
Een gecodeerd wachtwoord voor data services gebruiken

Het is aan te raden om wachtwoorden, klantgegevens, vertrouwelijke informatie en andere informatie die u goed wilt bewaren als een geheim te coderen.

WSO2-producten hebben een ingebouwde tool genaamd Secure Vault waarmee u waarden kunt coderen. De implementatie is een “veilige kluis” en de onderliggende tool een “coderingstool”.  In deze blog laat ik zien hoe u de coderingstool kunt inschakelen, en hoe u een wachtwoord in een gegevensbronconfiguratie kunt coderen als onderdeel van een gegevensservice.

Coderingstool

Ik ga de coderingstool gebruiken op een out-of-the-box-kopie van de enterprise integrator 6.6.0. “Out of the box” betekent in dit geval geen wijzigingen en geen aanpassingen. Gewoon het zip-bestand op de desktop uitpakken, zodat u de instructies eenvoudig kunt volgen op uw eigen pc of server. Het besturingssysteem dat ik gebruik is CentOS 7, vandaar het gebruik van de shell-scripts die typisch zijn voor Linux. Voor Windows gebruikt u natuurlijk de BAT-bestanden in dezelfde directory (de bin-directory).

Hoe werkt de coderingstool? Wanneer u de coderingstool voor de eerste keer opstart, gebruikt het twee bestanden om te bepalen wat er moet worden gecodeerd en om de gecodeerde waarden op te slaan. Deze bestanden zijn “cipher-text.properties” en “cipher-tool.properties” en zijn te vinden in de subdirectory [EI-HOME]/conf/security.

Het bestand Cipher-tool.properties bevat de locatie van configuratiebestanden waarin de wachtwoorden moeten worden gecodeerd. Het formaat is vrij eenvoudig en bestaat uit drie delen:

  1. Het pad / de naam van het configuratiebestand, bijvoorbeeld conf/carbon.xml
  2. De xpath-referentie van het configuratie-item, bijvoorbeeld //Server/Security/KeyStore/Password
  3. Een vlag die waar of onwaar is en die aangeeft of de waarde waarnaar wordt verwezen door het xpath moet worden gecodeerd.

De documentatie van WSO2 zegt dat u waarden handmatig moet coderen en in het cijfertekstbestand moet plaatsen. Dat kan natuurlijk, maar er is nog een andere oplossing die ik later in deze blog laat zien. Laten we het eerst doen zoals WSO2 het bedoeld heeft.

Om codering in te schakelen, moet u naar de bin-directory gaan, waar het ciphertool-toolscript te vinden is.

De eerste keer dat u dit opstart moet u een extra parameter meegeven: -Dconfigure. Hiermee worden de standaardinstellingen in de twee bestanden overgenomen en gecodeerd.

Laten we deze bestanden in detail bekijken en vervolgens het resultaat van de uitvoering van het coderen.

Eerst het cijfertekstbestand. Wat u hier zult vinden, zijn de geheime aliasnamen en de bijbehorende wachtwoorden in platte tekst die codering vereisen. De waarde staat tussen vierkante haken.

cipher text properties

Als u vervolgens naar het coderingstool-bestand kijkt, is daar de locatie te zien van het bestand waarin de gecodeerde waarde moet worden opgeslagen.

cipher tool properties required parameters

Laten we de coderingstool voor de eerste keer starten met de vereiste parameters.

ciphertool carbon security

Als u naar het carbon.xml-bestand kijkt, ziet u inderdaad dat de oorspronkelijke waarde in platte tekst is vervangen. U ziet nu het volgende:

carbon.xml file

<Password svns:secretAlias=”Carbon.Security.KeyStore.Password”>password</Password>

Laten we beginnen met de Enterprise Integrator. Omdat ook het keystore-wachtwoord is gecodeerd, moet u dit invoeren bij het opstarten, aangezien het gecodeerde wachtwoord nodig is om de wachtwoorden te ontsleutelen.

carbon security enterprise integrator

Als u het wachtwoord niet wilt invoeren, kunt u het bestand ook als platte tekst invoeren die bij het opstarten wordt gelezen – ook al is deze oplossing niet perfect. De naam moet wachtwoord -tmp zijn . Het moet worden opgeslagen in de map [EI-HOME]. Als u wilt dat het bestand op die locatie blijft, moet u het wachtwoord-persist noemen.Let op: deze bestanden moeten bij Windows het achtervoegsel .txt hebben.

wp identity and access management
Whitepaper De Keuzegids Voor Identity and Access Management

Wil je jouw Identity and Access Management gelijk vanaf het begin goed regelen?

Nu downloaden

Nu start de Enterprise Integrator en kunt u handmatig een waarde coderen. Laten we het wachtwoord van een gegevensbronconfiguratie coderen naar MySQL. Ik noem de gecodeerde waarde: Mysql.DB.Password. Maar start eerst de coderingstool opnieuw, maar dit keer zonder de eerder genoemde extra parameter. Houd er rekening mee dat u het Keystore-wachtwoord (standaard wso2carbon) twee keer moet invoeren. In mijn setup is het wachtwoord voor databaseverbinding root (ik weet dat dit niet veilig is, maar dit is natuurlijk een voorbeeldconfiguratie).

Nadat de waarde voor de tweede keer is ingevoerd, wordt de gecodeerde waarde in de terminal weergegeven. Kopieer deze waarde.

encrypted value

Open de cijfertekst en voeg het wachtwoord toe aan het bestand.

cipher text properties password

Nu kunt u deze waarde gebruiken in een gegevensbronconfiguratie.

Opzetten

Voordat we deze configuratie gaan verkennen, zijn er enkele stappen nodig voor de installatie  Ik ga een database in de tabel maken om dit uit te proberen in mijn lokale Maria DB-configuratie. Ik neem de sql-commando’s in deze blog op voor als u het wilt uitproberen. Het is een van de gebruikte voorbeelden om te oefenen.

create database trainingdb;

use trainingdb;

CREATE TABLE books (number INT, title VARCHAR(50), writer VARCHAR(40), onloan CHAR(1));

INSERT INTO books (number, title, writer, onloan) VALUES(1,"A brief history of time", "S. Hawking", "N");

INSERT INTO books (number, title, writer, onloan) VALUES(2,"The Hitchhikers Guide to the Galaxy", "D. Adams", "N");

INSERT INTO books (number, title, writer, onloan) VALUES(3,"The Picture of Dorian Gray", "O. Wilde", "N");

select * from  books;

create training cipher tool properties

We hebben nu een database en een tabel met drie records, dus dat deel is nu klaar. Vervolgens moeten we de gegevensbronverbinding met de tabel maken. Dit vereist echter dat we een JDBC-connector toevoegen aan de Enterprise Integrator. Dit gaat naar de lib-directory en is direct te vinden onder de home-directory van de enterprise integrator ([EI-HOME]). U kunt op verschillende plaatsen een jdbc-connector downloaden, bijvoorbeeld via deze url. Houd er rekening mee dat ik de MySQL-connector gebruik in plaats van de MariaDB-connector. Dit heeft te maken met het verleden, toen MariaDB dit vereiste vanwege een fout in de JDBC-connector. Kopieer het jar-bestand (in het zip-bestand) naar de lib-directory en (her)start de server. Dit komt omdat de lib-directory alleen wordt gelezen bij het opstarten.

enterprise integrator home directory

Laat de Enterprise Integrator starten en krijg toegang tot de URL van de Management UI.

enterprise integrator management ui

Log in met admin / admin-referenties en selecteer Datasource op het tabblad Configureren.

Enterprise Integrator data sources

Klik op Gegevensbron toevoegen. Vul de gegevens in. Zoals u kunt zien, is het niet mogelijk om een geheime alias te gebruiken, omdat de gegevensbrondefinitie de waarde gecodeerd opslaat in het register. Een beheerder kan dus een gegevensbron maken en ontwikkelaars kunnen die gegevensbron gebruiken bij het GENEREREN van gegevensservices, omdat daarvoor een vooraf gedefinieerde gegevensbron vereist is.

add datasource

Het downloaden van de waarde toont de configuratie. Ik heb het een beetje geordend om de xml-opmaak te tonen.

xml markup datasource
new datasource

Maar wanneer u een gegevensservice maakt, is het een ander verhaal. Daar moet u wel een wachtwoord invullen. Dus als u wilt dat uw ontwikkelaars de Create-service gebruiken en het wachtwoord niet openstellen, kunt u het eerder beschreven mechanisme gebruiken met de Mysql.DB.Password-waarde.

create Mysql DB Password value

Ik heb de selectiequery toegevoegd aan de gegevensservice en zoals u kunt zien, krijg ik een antwoord.

training data services

Alternatieve oplossing

Welke andere oplossing is er? Aangezien de waarde moet worden toegevoegd aan het cijfertekstbestand, kunt u ook een dummy xml-bestand maken in conf en de opstartconfiguratie gebruiken.

Oftwel de opstartconfiguratie gebruiken met velden die u zelf definieert in cipher-text en de coderingstool om de gecodeerde waarde te genereren?

Ik zal een nieuwe EI opzetten en het uitproberen. Ik heb password.xml aangemaakt in de conf-directory.

password xml

Ik heb het cijfertekstbestand gewijzigd om het Mysql.DB.Password op te nemen.

change cypher text file to include password

En de coderingstool om de gecodeerde waarde op te slaan.

cipher tool to store encrypted value

Laten we het script uitvoeren. Dit bericht verschijnt:

Beschermd token [Mysql.DB.Password] is met succes bijgewerkt in /conf/password.xml. Bekijk dit item nu in het bestand password.xml.

protect token password xml.file

De cijfertekst toont nu de gecodeerde waarde.

encrypted value ciper text

Een snelle test met de Create Data-service bevestigt dat het werkt.

Create data service test
ned
Sluiten
Wat staat er op ons menu