VisualSVN Server setup
V tuto chvíli nejjednodušší cestou, jak zprovoznit na Windows platformě Subversion server komunikující přes HTTP(S), je freeware produkt VisualSVN server. Následující text pojednává o experimentálním zprovoznění beta verze tak, aby fungovala dle mého očekávání.
Na začátek důležité upozornění - tento článek pojednává o betaverzi produktu VisualSVN server a o nedoporučované úpravě konfiguračních souborů zapouzdřeného Apache serveru. Je tudíž žádoucí zálohovat jak originální konfiguraci, tak veškerá uživatelská data v Subversion repository uložená.
Instalace Subversion programu na Windows není nic složitého. Nevýhodou ovšem je, že komunikuje nativně pouze na souborové úrovni (tj. lokálně), případně pomocí protokolu svn:. Daleko výhodnější je přenos pomocí http: nebo ještě lépe https:. Zde se již Subversion neobejde bez instalace Apache serveru, alternativně s podporou SSL. Konfigurace jako taková není jednoduchá, odměnou však je naprostá variabilita výsledku. Lze ověřovat uživatele vůči běžnému textovému souboru nebo je možné nakonfigurovat LDAP autentizaci a uživatele ověřovat vůči firemnímu Active Directory. Pro přístup lze používat členství ve skupinách. Když už tam jednou Apache je, lze doinstalovat PHP a pro brouzdání prohlížečem připravit na serverové straně výborné WebSVN.
Vše výše uvedené je výborné pro nasazení do firemního prostředí, kde je na Subversion vyčleněn dedikovaný server, existuje více repository úložišť a systém využívá větší množství uživatelů.
Co však v případě, kdy se jedná o použití soukromé, kdy se počty uživatelů dají spočítat na prstech jedné ruky, data mají být uložena na nededikovaném serveru, aby byla snadno a přitom bezpečně dostupná? Původně jsem zvažoval, že si zkompiluji vlastní Apache instalaci s podporou SSL, nicméně jsem se náhodou progooglil k produktu, který mi celou anabázi usnadnil. A ačkoliv je potřeba přijmout pár kompromisů, výsledek je pozitivní.
Společnost VisualSVN je tvůrcem komerčního rozšíření Visual Studia o nadstavbu oblíbeného klienta TortoiseSVN. Jejich produkt se jmenuje - VisualSVN :) O tom však nic psát nechci. Jejich zajímavým počinem je totiž VisualSVN Server, který v jednom instalačním souboru kombinuje Subversion, Apache s podporou SSL a GUI management konzoli. Instalace je opravdu natolik snadná, že ji nebudu popisovat. Příprav prostředí (vytvoření uživatelů, skupin, jednotlivých repository, přidělení páv) je díky GUI rozhraní také otázkou minut či spíše sekund. Pokud jste již předtím používali Subversion, je velmi snadné naimportovat původní repository do nového úložiště, tentokráte již pod správou VisualSVN Serveru.
Na stránce http://visualsvn.com/beta/ jsou k dispozici nejnovější vývojářské beta verze, u VisualSVN Serveru je to verze 1.1.0.10296. Ta se skládá z následujících komponent:
- Subversion 1.4.6
- Apache 2.2.8
- OpenSSL 0.9.8g
- ZLib 1.2.3
- Neon 0.27.2
Produkt funguje po instalaci bez problémů na portu 8443. Přesto jsem našel pár drobností, které jsem chtěl upravit. Bohužel to nelze provést pomocí GUI, ale přímou úpravou konfiguračních souborů (i když to výrobce nedoporučuje). Prvním krokem, který by měl po instalaci následovat, tak je záloha souborů httpd.conf a server.pem v adresáři \VisualSVN Server\conf\.
Jakých úprav jsem chtěl docílit?
-
změna ServerName a portu, které byly při instalaci automaticky doplněny
-
změna bindingu Apache na jiný port a pouze jednu specifikovanou IP adresu. S tímto krokem úzce souvisí i změna bindingu IIS Serveru, aby neokupoval všechny IP adresy přiřazené serveru.
-
změna self-signed certifikátu na certifikát podepsaný certifikační autoritou
Přípravné práce:
-
na pracovní stanici si nainstalovat OpenSSL for Windows
-
na serveru si nainstalovat Windows 2003 Support Tools, které obsahují utilitu httpcfg.exe. Postup, jak omezit automatické bindování IIS na všechny serveru přiřazené adresy na portech 80 a 443 jsem již popisoval zde, takže se na tento článek pouze odkážu.
Vlastní úpravy VisualSVN Serveru:
-
pro změnu ServerName a portu stačí otevřít soubor httpd.conf v c:\Program Files\VisualSVN Server\conf\ a nahradit řetězec na řádku začínajícím direktivou ServerName za správný
-
změna bindingu se provede snadno tak, že se v tom samém konfiguračním souboru upraví direktiva Listen "8443" na Listen "IP_adresa:443", kde IP_adresa je decimálně zadaná IP adresa rezervovaná pro použití Apache serverem. Tato adresa nesmí být přiřazena IIS serveru pomocí httpcfg.exe (viz výše uvedené přípravné práce).
-
nejsložitější úpravou je výměna self-signed certifikátu za řádně podepsaný certifikát vámi zvolenou certifikační autoritou. V první řadě je nutné získat správný certifikát, následovat tedy budou kroky prováděné na pracovní stanici s nainstalovaným OpenSSL for Windows.
-
Nejdříve je nutné vygenerovat sadu klíčů
C:\Program Files\OpenSSL\bin>openssl genrsa -des3 -out svn.domena.tld.key 1024
následně zadáte heslo k privátnímu klíči (zapamatovat!) -
Poté je třeba připravit CSR request, jenž bude předán certifikační autoritě k ověření
C:\Program Files\OpenSSL\bin>openssl req -new -key svn.domena.tld.key -out svn.domena.tld.csr
vyžadováno bude opět zadání hesla k privátnímu klíči. Následuje série otázek na obsah nově vytvářeného certifikátu:
Country Name (2 letter code) [AU]:CZ
State or Province Name (full name) [Some-State]:Prague region
Locality Name (eg, city) []:Prague
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Domena
Organizational Unit Name (eg, section) []:Domena
Common Name (eg, YOUR name) []:svn.domena.tld
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []: -
Nyní je soubor svn.domena.tld.csr připraven k předání na certifikační autoritu, jejíž administrátor požadavek potvrdí a vrátí zpět vygenerovanou odpověď.
-
V případě, kdy je certifikační autoritou Windows Server 2003 CA, je dobré stáhnout odpověď ve tvaru DER a následně ji převést tímto příkazem do formátu PEM:
C:\Program Files\OpenSSL\bin>openssl x509 -inform der -in svn.domena.tld.cer -outform pem -text -out svn.domena.tld.pem
Toto je forma stravitelná pro Apache Server. -
Soubory svn.domena.tld.key a svn.domena.tld.pem přeneste na server, třeba do adresáře /conf/.
-
-
Nyní je možné přejít k úpravám na straně serveru.
-
v adresáři /conf/ vytvořte soubor passphrase.bat s tímto textem
@echo heslo_k_privátnímu_klíči -
v souboru httpd.conf změňte direktivu SSLPassPhraseDialog builtin na SSLPassPhraseDialog exec:conf/passphrase.bat
-
v souboru httpd.conf změňte direktivu SSLCertificateFile conf/server.pem na SSLCertificateFile conf/svn.domena.tld.pem
-
v souboru httpd.conf změňte direktivu SSLCertificateKeyFile conf/server.pem na SSLCertificateKeyFile conf/svn.domena.tld.key
-
uložte soubor httpd.conf
-
restartněte službu VisualSVNServer
-
-
přihlaste se prohlížečem na https://svn.domena.tld/. Systém vás automaticky přesměruje na https://svn.domena.tld/svn/, po autentizaci a autorizaci můžete brouzdat skrz všechny založené repository
-
otevřete TortoiseSVN Repo-browser na URL https://svn.domena.tld/svn/moje_repo, kde moje_repo je název existujícího repository. Po autentizaci a autorizaci je možné brouzdat v tomto jednom specificky určeném repository. Nelze používat pouze htttps://svn.domena.tld/svn/, protože Subversion klienti nemají vestavěnou možnost brouzdání mezi různými repository. Pokud na toto nebudete myslet, narazíte na chybu
Error * PROPFIND request failed on '/svn' PROPFIND of '/svn': 405 Method Not Allowed (https://svn.domena.tld)
-
zatím jsem nepřišel na to, jak se zbavit zbytečného adresáře /svn/
-
služba VisualSVNServer běží jako Local System, což je hodně vysoké oprávnění. Na druhou stranu manuální rozchození Apache a Subversion tak jako tak vyžaduje oprávnění Log on as a service a hlavně Act as a part of the operating system, což je také velmi privilegované, takže to ve finále asi vyjde nastejno. U VisualSVN Serveru se člověk alespoň nemusí babrat s ACL právy na adresář s repository daty.
-
vzhledem k výše uvedenému by se mi líbilo si zapnout vyžadování klientského certifikátu vydaného mou certifikační autoritou pomocí níže uvedených direktiv, bez problémů to funguje v prohlížeči, ale zatím jsem nedonutil ke spolupráci TortoiseSVN
SSLVerifyClient require
SSLVerifyDepth 1
SSLCACertificateFile conf/CA_root_public_key.pem