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:
- Het pad / de naam van het configuratiebestand, bijvoorbeeld conf/carbon.xml
- De xpath-referentie van het configuratie-item, bijvoorbeeld //Server/Security/KeyStore/Password
- 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.
Als u vervolgens naar het coderingstool-bestand kijkt, is daar de locatie te zien van het bestand waarin de gecodeerde waarde moet worden opgeslagen.
Laten we de coderingstool voor de eerste keer starten met de vereiste parameters.
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:
<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.
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.
Wil je jouw Identity and Access Management gelijk vanaf het begin goed regelen?
Nu downloadenNu 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.
Open de cijfertekst en voeg het wachtwoord toe aan het bestand.
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;
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.
Laat de Enterprise Integrator starten en krijg toegang tot de URL van de Management UI.
Log in met admin / admin-referenties en selecteer Datasource op het tabblad Configureren.
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.
Het downloaden van de waarde toont de configuratie. Ik heb het een beetje geordend om de xml-opmaak te tonen.
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.
Ik heb de selectiequery toegevoegd aan de gegevensservice en zoals u kunt zien, krijg ik een antwoord.
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.
Ik heb het cijfertekstbestand gewijzigd om het Mysql.DB.Password op te nemen.
En de coderingstool om de gecodeerde waarde op te slaan.
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.
De cijfertekst toont nu de gecodeerde waarde.
Een snelle test met de Create Data-service bevestigt dat het werkt.