Tekniikka/Digivirasto

Kohteesta DigiWiki
< Tekniikka
Versio hetkellä 28. huhtikuuta 2024 kello 10.57 – tehnyt TUOMALA JUHA 10000350X (keskustelu | muokkaukset)
(ero) ← Vanhempi versio | Nykyinen versio (ero) | Uudempi versio → (ero)
Siirry navigaatioon Siirry hakuun

Digiviraston tietoja voi hyödyntää palveluita rakentaessa. Julkisesti avoimena ovat:

  • varmennehakemisto josta voi tehdä kyselyitä LDAP-protokollalla
  • varmenteiden sulkulista jonka voi ladata HTTP-protokollalla


LDAP varmennehakemisto

LDAP-hakemiston kyselyitä voi tehdä Digiviraston järjestelmästä anonyymisti ja osa (väestötietojärjestelmä,) vaatii sopimuksen ja pääsyoikeudet. Kyselyitä voi tehdä käyttäen SATU-tunnusta tai nimistä ja SATU:sta johdettua Common Name -attribuuttia. Jos henkilöllä ei ole henkilökorttia ja sen aktiivista varmennetta, kyselyt eivät palauta mitään.

Huomaa, että ldapsearch ohjelman syntaksi on muuttunut, vanhemmat versiot käyttävät -h <hostname> syntaksia, uudemmat -H ldap://ldap.fineid.fi. Uudemmissa versioissa vanha -h vipu on poistettu kokonaan.

Hakemistohierarkian ja kyselyiden kanssa avusti LDAP-asiantuntija Timo Kirves <timo@omit.fi>.


Hakemiston hierarkia:

ldapsearch  -LLL -x -H ldap://ldap.fineid.fi -b "" -s base objectclass=\*  namingcontexts
dn:
namingcontexts: c=FI
namingcontexts: dc=vp4,dc=x
namingcontexts: o=netscaperoot
  • c=FI: väestön palvelutuotantoon tarkoitettu asioijatieto.
  • dc=vp4,dc=x: sisäisessä käytössä¹.
  • o=netscaperoot: fedora 389-hakemiston konfiguraatiot¹.

¹ - kyselyt vaativat tunnukset ja tunnistautumisen.

Hierarkiassa esiintyvä dmdName (directory management domain, DMD) on ?.

Henkilön tiedot

Haut kannattaa tehdä SATU-tunnuksella jos mahdollista sillä se on täysin yksilöivä ja pysyy aina samana vaikka henkilön kortti vaihtuisikin uudempaan. Hauissa on hyvä huomioida, että jokaisella on SATU olemassa, mutta kyselyt eivät palauta mitään jos ei ole aktiivista varmennetta, tämä pätee vanhentuneisiin varmenteisiin sekä henkilöihin jotka eivät ole ikinä hankkineet henkilökorttia tai Mobiilivarmennetta.


Common Name (CN) haku SATU-tunnuksella:

$ ldapsearch -x -H ldap://ldap.fineid.fi -b dmdName=fineid,c=fi serialNumber=10000350X cn
cn: TUOMALA JUHA 10000350X

SATU-tunnuksen haku etu- ja sukunimen perusteella, poiskytketyllä määrärajoitteella:

$ ldapsearch -x -H ldap://ldap.fineid.fi -LLL -b dmdName=fineid,c=fi -z 0 "(&(givenname=Juha)(sn=Tuomala))" serialnumber |grep serial|sort -n

serialnumber: 10000350X
serialnumber: 11921353S
serialnumber: 12346428V
serialnumber: 12668514R
serialnumber: 130409648
serialnumber: 13321775N
$

Käyttäjän varmenteen haku SATU-tunnuksella:

$ ldapsearch -x -H ldap://ldap.fineid.fi  -b dmdName=fineid,c=fi   serialnumber=10000350X usercertificate                     
# extended LDIF
#
# LDAPv3
# base <dmdName=fineid,c=fi> with scope subtree
# filter: serialnumber=10000350X
# requesting: usercertificate 
#

# 1002703297, VRK Gov. CA for Citizen Qualified Certificates - G2, Valtion kans
 alaisvarmenteet, Vaestorekisterikeskus CA, FINEID, FI
dn: certificateSerialNumber=1002703297,cn=VRK Gov. CA for Citizen Qualified Ce
 rtificates - G2,ou=Valtion kansalaisvarmenteet,o=Vaestorekisterikeskus CA,dmd
 Name=FINEID,c=FI
usercertificate;binary:: MIIHMjCCBRqgAwIBAgIEO8QJwTANBgkqhkiG9w0BAQsFADCBlDELM
AkGA1UEBhMCRkkxITAfBgNVBAoTGFZhZXN0b3Jla2lzdGVyaWtlc2t1cyBDQTEkMCIGA1UECxMbVm
FsdGlvbiBrYW5zYWxhaXN2YXJtZW50ZWV0MTwwOgYDVQQDEzNWUksgR292LiBDQSBmb3IgQ2l0aXp
lbiBRdWFsaWZpZWQgQ2VydGlmaWNhdGVzIC0gRzIwHhcNMTYwNjE0MDkxMzAxWhcNMjEwNjEzMjA1
OTU5WjBjMQswCQYDVQQGEwJGSTESMBAGA1UEBRMJMTAwMDAzNTBYMQ0wCwYDVQQqEwRKVUhBMRAwD
gYDVQQEEwdUVU9NQUxBMR8wHQYDVQQDExZUVU9NQUxBIEpVSEEgMTAwMDAzNTBYMIIBIjANBgkqhk
iG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs46ymqJIS49++jTDWAqhqpvOTsGPfuM6fkNS4qio1y2r6fb
kLnMd/+tSPyER3r81mDmOUO0+N5ytAJYQW73ZyMmbhDD3wgU8JJ0L4HdNlaDrlDk1+SegvfkpTiG/
J1IKr1FcozB3L3mbz3REArJf+gNqPjl72n1htQuyJmP5P9GQnQEovy9C5Fs0Q5EyMRx6lloLyZ55B
rnBSRAa1FNSKFTaD0lLSSdsXkh/xyj5/mxDOce/HtM7JOCZs1odf7PVvZ69dOWz8avsUZFRia+B+U
ItSBZTfX5ZxN2ntcVh8Dr7uoSbu/GA3SNnO4wpagAu5kWI0u42sT8fYc7FewRFCQIDAQABo4ICujC
CArYwHwYDVR0jBBgwFoAUwa8dil8dmocNghD8nd31sB5w07UwHQYDVR0OBBYEFNukvpTRN+niaUxl
j5w8lHmmrJRDMA4GA1UdDwEB/wQEAwIEsDCBzQYDVR0gBIHFMIHCMIG/BgkqgXaEBQEKFgEwgbEwJ
wYIKwYBBQUHAgEWG2h0dHA6Ly93d3cuZmluZWlkLmZpL2NwczIxLzCBhQYIKwYBBQUHAgIweRp3Vm
FybWVubmVwb2xpdGlpa2thIG9uIHNhYXRhdmlsbGEgLSBDZXJ0aWZpa2F0IHBvbGljeSBmaW5ucyA
tIENlcnRpZmljYXRlIHBvbGljeSBpcyBhdmFpbGFibGUgaHR0cDovL3d3dy5maW5laWQuZmkvY3Bz
MjEwHgYDVR0RBBcwFYETanVoYS50dW9tYWxhQGlraS5maTAPBgNVHRMBAf8EBTADAQEAMIIBHgYDV
R0fBIIBFTCCAREwLaAroCmGJ2h0dHA6Ly9wcm94eS5maW5laWQuZmkvY3JsL3Zya2NxYzJjLmNybD
CB36CB3KCB2YaB1mxkYXA6Ly9sZGFwLmZpbmVpZC5maTozODkvY24lM2RWUkslMjBHb3YuJTIwQ0E
lMjBmb3IlMjBDaXRpemVuJTIwUXVhbGlmaWVkJTIwQ2VydGlmaWNhdGVzJTIwLSUyMEcyLG91JTNk
VmFsdGlvbiUyMGthbnNhbGFpc3Zhcm1lbnRlZXQsbyUzZFZhZXN0b3Jla2lzdGVyaWtlc2t1cyUyM
ENBLGRtZE5hbWUlM2RGSU5FSUQsYyUzZEZJP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3QwQQYIKw
YBBQUHAQEENTAzMDEGCCsGAQUFBzAChiVodHRwOi8vcHJveHkuZmluZWlkLmZpL2NhL3Zya2NxYzI
uY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBbZIjniOVftnKZ0/hvIdVRH9iM2FMVlcAMEja7nN3ji8zv
CgMPD++TFmIsnR4HhapBsgIKbDBaGqhTuIqZdezYcVImE32wGY+YkQqEKrCI+uB8+p7SsvMnl/eGk
C8q+lDCm5JzqX+ifR8G4Pgoznj5io+loarR2uR+pqm4BybP2bTNPMYwLPyKc36MnBZ9aQxtzfgjsH
gjsA/L3vI93Dn4DlOrfE5VN8+jJOINXh31xm8W/WJVBHTHA3FW2tgSLJtw7SIpofMNBoU6f/u/xdo
0fSKvA5p30oooAPFAQa3Fb9oAOdWVTbX/dT4sQ3HPvmxjsGeX36QYwkbb/FfEn4So3OH5D1zRmWw/
Q0vWYCS2YcWJY8sQvLhNcwI3ztu5/h7GAGvSuwsPtBgczHM6Db+MUogDmmTQrdKMlYWvCsVEd2Ugf
FNcPfM/FJ22pAaTPGhQEI5kVKrx7Zy88mVZnG8+5+TXHwKZK9zCTder4TrS6moOWt74vSoxrbUhw4
EBMlOeLRsd1jbPTxs18hJGu0iKub6X2IgDVtmIiQClOj5VKv+0Pcz6Jc5DLNhTgYwMVbXOHwge7tj
3ja89p7Sa/nfud29CF9OJBSi2KxyvbBJ42ckAdcNDoe/zis/v6aDHqaP/hqSRGLTmrEpaFVeuakkB
GUKqVbkcaEiw8YkWh9S1qQ==

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1


Asioijan tunnistusvarmenteen sormenjäljen tulostus SATU-tunnuksella:

$ ldapsearch -x -H ldap://ldap.fineid.fi -LLL -b dmdName=fineid,c=fi serialnumber=10000350X  usercertificate |grep -A40  usercertificate | sed -e 's#usercertificate;binary::##g' | head -n -1  | python -c "import sys; sys.stdout.write('-----BEGIN CERTIFICATE-----\n%s-----END CERTIFICATE-----\n' % (.join(sys.stdin.readlines()) ) )" | openssl x509 -noout  -fingerprint|cut -d\= -f2

B8:82:51:F3:2A:50:D0:50:E2:C6:92:9B:4F:D9:F9:A4:E3:13:78:D1
$

Sähköposti

Varemnnehakemiston suurin käyttökohde on sähköpostin salaus. Digivirasto on rakentanut varmennehakemistonsa siten, että organisaatio- ja sotevarmenteilla näkyy mail attribuutti, kansalaisvarmenteista ei - vaikka se olisi ilmoitettu valtiolle korttia hakiessa. Suurin osa sähköpostiohjelmista olettaa mail kentän olemassaolon ja käyttävät tätä hakeakseen salausvarmenteen.

Salattua viestiä lähettäessä ohjelmasta riippuen tapahtuu suunnilleen seuraavaa:

Vastaanottaja voidaan saada selville kirjoittamalla nimeä merkki kerrallaan, postiohjelmat hakua kun ensimmäiset merkit kirjoitetaan vastaanottajakenttään, esim Tuomala:

  • haetaan henkilöobjekteja
  • suodatetaan hakua mail, cn, givename, sn attribuutteja käyttäen TAI-operaatiolla
  • haetaan attribuutteja cn, mail, givenname, sn, objectclass

LDAP-protokollssa suodatin:

(&(|(|(objectclass=person)(objectclass=groupOfNames))(mail=*))(|(|(|(cn=tuoma*)(mail=tuoma*))(givenName=tuoma*))(sn=tuoma*)))

Hakutuloksista ja niiden attribuuteista rakennetaan esimerkiksi ns dropdown-lista käyttöliittymään, josta käyttäjä valitsee tarkoittamansa vastaanottajan ja mail-attribuutti on tiedossa.

Jos vastaanottaja valitaan käyttöliittymän listasta esim osoitekirjasta tai olemassaolevasta viestistä, mail-attribuutti on tiedossa.

Kun haluttu henkilö tiedetään, tehdään toinen kysely mail-attribuuttia käyttäen jotta saadaan usercertificate attribuutin arvo eli varmennehakemiston DER-koodattu varmenne, joka sisältää vastaanottajan julkisen avaimen jolla sähköposti salataan.

Ohjelmissa yleensä pystyy itse asettamaan LDAP-hakemistopuun alkuosan, base arvon (ldapsearch -b optio) ja mahdollisesti hakusuodattimen arvoja. Mutta nämä eivät riitä korjaamaan mail-attribuutin puutetta joka on kiinteästi osa ohjelmien toimintaa.

Sulkulista

$ ldapsearch -x -H ldap://ldap.fineid.fi -b dmdName=fineid,c=fi certificaterevocationlist

HTTP-kyselyt

Sulkulista


Varmennehierarkia

https://dvv.fineid.fi/api/v1/cas/100/people?serialNumber=10000350X
https://dvv.fineid.fi/api/v1/cas/100/people?mail=juha.tuomala%40iki.fi
[{
   "dn":
     "certificateSerialNumber=1002703297,
     cn=VRK Gov. CA for Citizen Qualified Certificates - G2,
     ou=Valtion kansalaisvarmenteet,o=Vaestorekisterikeskus CA,dmdName=FINEID,c=FI",
   "givenName":"JUHA",
   "sn":"TUOMALA",
   "mail":"juha.tuomala@iki.fi",
   "serialNumber":"10000350X",
   "certificateSerialNumber":"1002703297",
   "certificateSerialNumberHex":"3bc409c1"
 }]

Varmenteen lataus palauttaa DER-muotoisen binäärisen varmenteen.

https://dvv.fineid.fi/api/v1/people/certificateSerialNumber%3D1002703297%2Ccn%3DVRK%20Gov.%20CA%20for%20Citizen%20Qualified%20Certificates%20-%20G2%2Cou%3DValtion%20kansalaisvarmenteet%2Co%3DVaestorekisterikeskus%20CA%2CdmdName%3DFINEID%2Cc%3DFI/certificate

Katso myös

Aiheesta muualla