Tekniikka/Mediawiki

DigiWiki
Loikkaa: valikkoon, hakuun

Mediawiki on Wikipediaa varten kehitetty wiki-ohjelmisto ja suosituin eri wiki-variaatioista.


Sisällysluettelo

Varmennetunnistus

Asiakaspään varmennetta hyödyntävää tunnistusta rakennettaessa tarvitsee erotella normaali sivujen käyttö pelkästä tunnistustapahtumasta koska älykortin lukeminen jokaisella sivunlatauksella ei ole tarpeellista eikä mielekästä sen hitauden takia. Älykortin varmenteella luodaan siis istunto ja sen tunniste tallennetaan selaimen keksivarastoon jolla istuntoa ylläpidetään latauksesta toiseen. Yhteyden voi yhä suojata pelkällä palvelinpään SSL-varmenteella kuten normaalisti ilman käyttäjän tunnistusta tehdään.

Apache httpd.conf

Mediawiki käyttää suurimmaksi osaksi index.php scriptiä ja kaikkia wikin sivuja osoitetaan sen title= argumenteilla. Apache web-palvelin on hieman hankala käsitellessä näitä urleja, sillä se käsittelee linkin REQUEST_URI-osan ja sen kysymysmerkin (?) jälkeisen osan, QUERY_STRING-kyselyn erikseen. Tämä pätee myös erikoissivuihin (title=Toiminnot:Kirjaudu_sisään, title=Spaceial:UserLogin) joissa siis tulisi vaatia käyttäjän varmennetta SSLRequireSSL ja SSLVerifyClient require SSL-asetuksilla.

Mediawikissä tarvittavia virtuaaliserverin lokaatiopohjaisia asetuksia ei voi hyödyntää suoraan, koska Location ja LocationMatch määrittelyt eivät toimi QUERY_STRING-osan kanssa. Puutteen voi kiertää RewriteEngine-määrittelyillä jotka muuttavat linkin eri osat yhdeksi REQUEST_URI:ksi jota voi sitten käyttää Location -lohkon määrityksissä.


<VirtualHost 212.16.100.42:80>

 AddHandler php5-script .php
 AddType text/html .php
 DirectoryIndex index.html index.shtml index.php

 RewriteEngine  on
 RewriteCond    %{HTTPS} off

 RewriteCond %{REQUEST_URI} /mediawiki/index.php
 RewriteCond %{QUERY_STRING} title=Toiminnot:Kirjaudu_sis%C3%A4%C3%A4n&returnto=Etusivu
 RewriteRule ^(.*)$ https://%{SERVER_NAME}/mediawiki/index.php?title=Toiminnot:Kirjaudu_sisään&returnto=Etusivu [R]

 ScriptAlias /wiki /srv/www/digisaatio.fi/mediawiki/index.php
 
</VirtualHost>


<VirtualHost 212.16.100.42:443>
 DirectoryIndex index.html index.shtml index.php

 AddHandler php5-script .php
 AddType text/html .php

 RewriteEngine  on
 
 RewriteCond %{REQUEST_URI} /wiki/Toiminnot:Kirjaudu_sis%C3%A4%C3%A4n
 RewriteRule /wiki/Toiminnot:Kirjaudu_sis%C3%A4%C3%A4n /auth/fineid [PT,QSA]
 
 RewriteCond %{REQUEST_URI} /mediawiki/index.php
 RewriteCond %{QUERY_STRING} title=Toiminnot:Kirjaudu_sis%C3%A4%C3%A4n&returnto=Etusivu
 RewriteRule /mediawiki/index.php /auth/fineid [PT,QSA]
 
 RewriteCond %{REQUEST_URI} /mediawiki/index.php
 RewriteCond %{QUERY_STRING} title=Toiminnot:Kirjaudu_sis%C3%A4%C3%A4n&returnto=Etusivu&action=submitlogin&type=login&returnto=Etusivu
 RewriteRule /mediawiki/index.php /auth/fineid [PT,QSA]
 
 ScriptAlias "/auth/fineid" /srv/www/digisaatio.fi/mediawiki/index.php
 
 SSLEngine on
 SSLProxyEngine off
 SSLProtocol All
 SSLCipherSuite ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM:+SSLv3
 SSLOptions +OptRenegotiate +StdEnvVars +ExportCertData
 
 SSLCertificateFile /srv/sys/pki/digisaatio.fi.cert.pem
 SSLCertificateKeyFile /srv/sys/pki/digisaatio.fi.key.pwdless.pem
 SSLCACertificatePath /srv/sys/pki/ca
 
 <Location "/auth/fineid" >
   SSLRequireSSL
   SSLVerifyClient require
   SSLVerifyDepth  2
   SSLRequire      %{SSL_CLIENT_I_DN_OU} eq "Valtion kansalaisvarmenteet"
 </Location>

</VirtualHost>

RewriteRule PT (pass through) ja QSA (Query String Append) asetukset löytyvät dokumentaatiosta: httpd.apache.org - RewriteRule Flags

Mediawiki LocalSettings.php

Henkilön varmenteelta löytyviä tietoja voi käyttää hyväksi uutta käyttäjää luodessa. Tunnistusmoduulin sivulla mainittua SSL_CLIENT_S_DN_Email ei voi hyödyntää, sillä suomalaisella varmenteella olevaa sähköpostiosoitetta ei lue Apachen ympäristömuuttujissa suoraan. Henkilökortin varmennehausta myös selviää, että valtaosa ihmisistä ei ole myöskään antanut hakemuksessaan mitään sähköpostiosoitetta. Sähköpostiosoite on itse muokattava tieto, mutta sen voisi myös alustaa kuten henkilön nimen jos se olisi helposti luettavissa.

require_once( "$IP/extensions/SSLAuthentication/SSLAuthPlugin.php" );

# Käytä käyttäjän varmenteen tietoja tunnuksen alustamiseksi.
$ssl_map_info = true;

# Real Name
# Käyttäjän oletus nimi hänen metatiedoissa. Käyttäjä voi myöhemmin itse muuttaa tätä.
if ( isset($_SERVER['SSL_CLIENT_S_DN_CN']) and isset($_SERVER['SSL_CLIENT_S_DN_S'] ) ) {
  $ssl_RN = $_SERVER['SSL_CLIENT_S_DN_G'] . " " . $_SERVER['SSL_CLIENT_S_DN_S'];
}

# User Name
# Käyttäjän käyttäjätunnus, joko koko Common Name, esim: TUOMALA JUHA 10000350X
# tai sen viimeinen osa, SATU-tunnus, esim: 10000350X
if (isset($_SERVER['SSL_CLIENT_S_DN_CN'])) {
  # $ssl_UN = $_SERVER['SSL_CLIENT_S_DN_CN'];
  $ssl_UN = end( explode(" ", $_SERVER['SSL_CLIENT_S_DN_CN']) );
}

SSLAuthSetup();

SSL-tunnistuksen toteutus löytyy mediawikin sivuilta:

tarvittavaa tiedostoa ei ole versioitu versionhallintaan, sen voi kopioida wiki-sivulta suoraan ja tallentaa vaikka SSLAuthentication/SSLAuthPlugin.php hakemistoon joka löytyy Mediawikin hakupolusta. Hakupolun voi ratkaista symboolisesti linkittämällä sen itse lähdekoodiin.


Katso myös

  • Apache/2.2 aiheeseen liittyviä Apache httpd asetuksia

Aiheesta muualla

Henkilökohtaiset työkalut
Nimiavaruudet

Kirjoitusjärjestelmät
Toiminnot
Valikko
Työkalut