Ik was mij aan het verdiepen in SSL om zodoende zelf beveiligde socket verbindingen op te kunnen zetten. Echter, ik heb moeite met goede uitleg te vinden. Ik vind sites die zeggen, "typ zus en zo in, dan werkt het" en aan het andere kant van het spectrum vind ik technische documentatie over het encrypten.
Ik ben echter opzoek naar meer globale uitleg.
Wat ik al denk te weten: ( graag aangeven waar ik verkeerd zit en hoe het dan wel zit )
Er zijn certificaten, deze worden gebruikt om 'chains' ( kettingen/ketens? ) op te zetten van vertrouwde instanties.
voorbeeld:
* ik vertrouw certificaten van jantje.
* pietje heeft zijn certificaat laten ondertekenen door jantje.
* wanneer ik pietje's certificaat te zien krijg, kan ik dit vertrouwen omdat jantje dit vertrouwd.
Deze certificaten kunnen gemaakt worden met software zoals openssl. Als ik een certificaat aanmaak, heb ik de (optie/verplichting?) dit certificaat te beveiligen met een wachtwoord. Hiermee voorkom je een situatie waarbij je certificaat in de verkeerde handen valt en deze kwaadwillende meteen allerlei certificaten gaat ondertekenen in jouw naam.
Ik lees op internet over root- en 'gewone' certificaten. Is er daadwerkelijk een verschil tussen beide? Of is dit slechts om aan te geven dat het een certificaat betreft dat zelf niet overlegd wordt met anderen, slechts om andere certificaten te ondertekenen?
Als je succesvol voorbij de certificaten bent gekomen weet je dat de connectie die je hebt gemaakt ook daadwerkelijk opgezet is met de 'persoon' die je wenst te bereiken. ( man-in-the-middle aanval is hiermee voorkomen ). Dan ga je communiceren en om je data niet open en bloot rond te sturen gebruik je en-/decryptie sleutels.
Public en private keys. De private key is prive bezit en mag nooit gedeeld worden. Data die versleuteld is met de private key kan alleen ontsleuteld worden dmv. de public key en andersom.
Is de private key daadwerkelijk anders dan de public key? Of zijn het gewoon elkaars tegenhangers en maakt het niet uit welke van de twee je als public gebruikt, zolang je het maar consistent doet?
Zolang ik kan garanderen dat mijn private key niet uitlekt kan ik altijd garanderen dat niemand meeluistert, je informatie is veilig, want packet-sniffers kunnen wel onderscheppen welke bytes je verzend, maar ze kunnen de gegevens niet decoderen om de informatie te achterhalen.
Daarnaast probeer ik de voorbeelden op http://www.rtfm.com/openssl-examples/ werkend te krijgen.
Deze voorbeelden zijn weliswaar verouderd, maar tenzij iemand betere weet lijkt het mij een prima startpunt.
In de originele broncode zitten 4 .pem bestanden meegeleverd die inmiddels verlopen zijn. Het is mij tot op heden niet gelukt om nieuwe certificaten/keys aan te maken omdat ik niet precies begrijp wat nu precies wat is. Op basis van de headers kom ik tot het volgende:
client.pem -> KEYFILE -> dus waarschijnlijk een public/private key en omdat het de client betreft zal dit een public key zijn
root.pem -> CA_LIST -> een (root)certificaat?
server.pem -> KEYFILE -> de private key als tegenhanger van de public key in client.pem?
dh1024.pem -> DHFILE -> ???
wat ik geprobeerd heb:
http://www.madboa.com/geek/openssl leerde mij dat ik als volgt een certificaat en private key kon maken:
vervolgens een public key:
echter, als ik vervolgens de bijbehorende wserver executable start, dan klaagt deze:
Aangezien ik geen idee heb of mijn aannames over server.pem/client.pem/root.pem wel juist waren heb ik geen idee wat ik verkeerd doe. Hopelijk kunnen jullie mij wegwijs maken.
alvast bedankt!
Ik ben echter opzoek naar meer globale uitleg.
Wat ik al denk te weten: ( graag aangeven waar ik verkeerd zit en hoe het dan wel zit )
Er zijn certificaten, deze worden gebruikt om 'chains' ( kettingen/ketens? ) op te zetten van vertrouwde instanties.
voorbeeld:
* ik vertrouw certificaten van jantje.
* pietje heeft zijn certificaat laten ondertekenen door jantje.
* wanneer ik pietje's certificaat te zien krijg, kan ik dit vertrouwen omdat jantje dit vertrouwd.
Deze certificaten kunnen gemaakt worden met software zoals openssl. Als ik een certificaat aanmaak, heb ik de (optie/verplichting?) dit certificaat te beveiligen met een wachtwoord. Hiermee voorkom je een situatie waarbij je certificaat in de verkeerde handen valt en deze kwaadwillende meteen allerlei certificaten gaat ondertekenen in jouw naam.
Ik lees op internet over root- en 'gewone' certificaten. Is er daadwerkelijk een verschil tussen beide? Of is dit slechts om aan te geven dat het een certificaat betreft dat zelf niet overlegd wordt met anderen, slechts om andere certificaten te ondertekenen?
Als je succesvol voorbij de certificaten bent gekomen weet je dat de connectie die je hebt gemaakt ook daadwerkelijk opgezet is met de 'persoon' die je wenst te bereiken. ( man-in-the-middle aanval is hiermee voorkomen ). Dan ga je communiceren en om je data niet open en bloot rond te sturen gebruik je en-/decryptie sleutels.
Public en private keys. De private key is prive bezit en mag nooit gedeeld worden. Data die versleuteld is met de private key kan alleen ontsleuteld worden dmv. de public key en andersom.
Is de private key daadwerkelijk anders dan de public key? Of zijn het gewoon elkaars tegenhangers en maakt het niet uit welke van de twee je als public gebruikt, zolang je het maar consistent doet?
Zolang ik kan garanderen dat mijn private key niet uitlekt kan ik altijd garanderen dat niemand meeluistert, je informatie is veilig, want packet-sniffers kunnen wel onderscheppen welke bytes je verzend, maar ze kunnen de gegevens niet decoderen om de informatie te achterhalen.
Daarnaast probeer ik de voorbeelden op http://www.rtfm.com/openssl-examples/ werkend te krijgen.
Deze voorbeelden zijn weliswaar verouderd, maar tenzij iemand betere weet lijkt het mij een prima startpunt.
In de originele broncode zitten 4 .pem bestanden meegeleverd die inmiddels verlopen zijn. Het is mij tot op heden niet gelukt om nieuwe certificaten/keys aan te maken omdat ik niet precies begrijp wat nu precies wat is. Op basis van de headers kom ik tot het volgende:
code:
1
2
3
4
| client.h:#define KEYFILE "client.pem" common.h:#define CA_LIST "root.pem" server.h:#define KEYFILE "server.pem" server.h:#define DHFILE "dh1024.pem" |
client.pem -> KEYFILE -> dus waarschijnlijk een public/private key en omdat het de client betreft zal dit een public key zijn
root.pem -> CA_LIST -> een (root)certificaat?
server.pem -> KEYFILE -> de private key als tegenhanger van de public key in client.pem?
dh1024.pem -> DHFILE -> ???
wat ik geprobeerd heb:
http://www.madboa.com/geek/openssl leerde mij dat ik als volgt een certificaat en private key kon maken:
openssl req -x509 -nodes -days 3650 -newkey rsa:1024 -keyout server.pem -out root.pem
vervolgens een public key:
openssl rsa -in server.pem -pubout > client.pem
echter, als ik vervolgens de bijbehorende wserver executable start, dan klaagt deze:
Can't read certificate file 18029:error:0906D06C:PEM routines:PEM_read_bio:no start line:/SourceCache/OpenSSL098/OpenSSL098-35.1/src/crypto/pem/pem_lib.c:648:Expecting: TRUSTED CERTIFICATE 18029:error:140DC009:SSL routines:SSL_CTX_use_certificate_chain_file:PEM lib:/SourceCache/OpenSSL098/OpenSSL098-35.1/src/ssl/ssl_rsa.c:729:
Aangezien ik geen idee heb of mijn aannames over server.pem/client.pem/root.pem wel juist waren heb ik geen idee wat ik verkeerd doe. Hopelijk kunnen jullie mij wegwijs maken.
alvast bedankt!

oprecht vertrouwen wordt nooit geschaad