Ich habe bereits in der Vergangenheit darüber geschrieben, wie wichtig ein transparentes und durchdachtes (und gelebtes!) Certificate Policy Statement ist - hier möchte ich nun ein Gedankenspiel vorstellen, wie man eine PKI vollständig air-gapped betreiben kann und doch noch einen relativ hohen Durchsatz erreicht und dabei sogar Wege offen bleiben, eine Automatisierung des Prozesses der Zertifikatserstellung zu erlauben...
Ich habe auch schon früher Setups für CAs beschrieben, die einen minimalen Sicherheitsstandard garantieren und vor Manipulation schützen sollten. Zu den bisher beschriebenen Maßnahmen gehörte unter anderem
Man kann, um das zu verhindern natürlich ein weiteres System zwischenschalten, an dem zunächst ein Malwarescan der genutzten Datenträger stattfindet - allerdings liegt es in der Natur der Malwarescanner, dass sie regelmäßige Updates benötigen, um mit den neuen Ideen der Angreifer Schritt halten zu können. Die einzige Möglichkeit, dies effektiv umsetzen zu können ist, diese Systeme dann doch wieder ans Netz anzuschließen. Diese Lösung ist also weiterhin nicht optimal.
Es existiert allerdings noch eine weitere Alternative: Ein Certificate Signing Request ist typischerweise als PKCS#10 im PEM-Format rund ein Kilobyte groß (Beispiel aus Wikipedia):
-----BEGIN CERTIFICATE REQUEST-----
MIICzDCCAbQCAQAwgYYxCzAJBgNVBAYTAkVOMQ0wCwYDVQQIDARub25lMQ0wCwYD
VQQHDARub25lMRIwEAYDVQQKDAlXaWtpcGVkaWExDTALBgNVBAsMBG5vbmUxGDAW
BgNVBAMMDyoud2lraXBlZGlhLm9yZzEcMBoGCSqGSIb3DQEJARYNbm9uZUBub25l
LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMP/U8RlcCD6E8AL
PT8LLUR9ygyygPCaSmIEC8zXGJung3ykElXFRz/Jc/bu0hxCxi2YDz5IjxBBOpB/
kieG83HsSmZZtR+drZIQ6vOsr/ucvpnB9z4XzKuabNGZ5ZiTSQ9L7Mx8FzvUTq5y
/ArIuM+FBeuno/IV8zvwAe/VRa8i0QjFXT9vBBp35aeatdnJ2ds50yKCsHHcjvtr
9/8zPVqqmhl2XFS3Qdqlsprzbgksom67OobJGjaV+fNHNQ0o/rzP//Pl3i7vvaEG
7Ff8tQhEwR9nJUR1T6Z7ln7S6cOr23YozgWVkEJ/dSr6LAopb+cZ88FzW5NszU6i
57HhA7ECAwEAAaAAMA0GCSqGSIb3DQEBBAUAA4IBAQBn8OCVOIx+n0AS6WbEmYDR
SspR9xOCoOwYfamB+2Bpmt82R01zJ/kaqzUtZUjaGvQvAaz5lUwoMdaO0X7I5Xfl
sllMFDaYoGD4Rru4s8gz2qG/QHWA8uPXzJVAj6X0olbIdLTEqTKsnBj4Zr1AJCNy
/YcG4ouLJr140o26MhwBpoCRpPjAgdYMH60BYfnc4/DILxMVqR9xqK1s98d6Ob/+
3wHFK+S7BRWrJQXcM8veAexXuk9lHQ+FgGfD0eSYGz0kyP26Qa2pLTwumjt+nBPl
rfJxaLHwTQ/1988G0H35ED0f9Md5fzoKi5evU1wG5WRxdEUPyt3QUXxdQ69i0C+7
-----END CERTIFICATE REQUEST-----
Ein entsprechendes Zertifikat nur wenig größer:
-----BEGIN CERTIFICATE-----
MIIDzzCCAregAwIBAgITN0EFee11f0Kpolw69Phqzpqp1zANBgkqhkiG9w0BAQ0F
ADBVMQ0wCwYDVQQKEwRJRVRGMREwDwYDVQQLEwhMQU1QUyBXRzExMC8GA1UEAxMo
U2FtcGxlIExBTVBTIFJTQSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAgFw0xOTEx
MjAwNjU0MThaGA8yMDUyMDkyNzA2NTQxOFowOzENMAsGA1UEChMESUVURjERMA8G
A1UECxMITEFNUFMgV0cxFzAVBgNVBAMTDkFsaWNlIExvdmVsYWNlMIIBIjANBgkq
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtPSJ6Fg4Fj5Nmn9PkrYo0jTkfCv4TfA/
pdO/KLpZbJOAEr0sI7AjaO7B1GuMUFJeSTulamNfCwDcDkY63PQWl+DILs7GxVwX
urhYdZlaV5hcUqVAckPvedDBc/3rz4D/esFfs+E7QMFtmd+K04s+A8TCNO12DRVB
DpbP4JFD9hsc8prDtpGmFk7rd0q8gqnhxBW2RZAeLqzJOMayCQtws1q7ktkNBR2w
ZX5ICjecF1YJFhX4jrnHwp/iELGqqaNXd3/Y0pG7QFecN7836IPPdfTMSiPR+peC
rhJZwLSewbWXLJe3VMvbvQjoBMpEYlaJBUIKkO1zQ1Pq90njlsJLOwIDAQABo4Gv
MIGsMAwGA1UdEwEB/wQCMAAwFwYDVR0gBBAwDjAMBgpghkgBZQMCATABMB4GA1Ud
EQQXMBWBE2FsaWNlQHNtaW1lLmV4YW1wbGUwEwYDVR0lBAwwCgYIKwYBBQUHAwQw
DgYDVR0PAQH/BAQDAgbAMB0GA1UdDgQWBBS79syyLR0GEhyXrilqkBDTIGZmczAf
BgNVHSMEGDAWgBSRMI58BxcMp/EJKGU2GmccaHb0WTANBgkqhkiG9w0BAQ0FAAOC
AQEAc4miNqfOqaBpI3f+CpJDhxtuZ2P9HjQEQ+v6BdP7GKJ19naIs3BjJOd64roA
KHAp+c284VvyVXWJ99FMX8q2ZUQMxH+xh6oAfzcozmnd6XaVWHg4eHIjSo27PmhK
E1oAJKKhDbdbEcZXL2+x1V+duGymWtaD01DZZukKYr7agyHahiXRn/C9cy31wbqN
sy9x0fjPQg6+DqatiQpMz9EIae6aCHHBhOiPU7IPkazgPYgkLD59fk4PGHnYxs1F
hdO6zZk9E8zwlc1ALgZa/iSbczisqckN3qGehD2s16jMhwFXLJtBiN+uCDgNG/D0
qyTbY4fgKieUHx/tHuzUszZxJg==
-----END CERTIFICATE-----
Selbst wenn man für Schlüssel und Hash andere Algorithmen benutzt werden die Zertifikate nur unwesentlich größer - hier ein anderes Beispiel:
-----BEGIN CERTIFICATE-----
MIIGozCCBIugAwIBAgIBGDANBgkqhkiG9w0BAQ0FADBiMQswCQYDVQQGEwJERTEZ
MBcGA1UECgwQRGFtYXNjaGtlc3RyLiAxMTEWMBQGA1UECwwNQXJiZWl0c3ppbW1l
cjEgMB4GA1UEAwwXRGFtYTExIExhYiBDb21wb25lbnQgQ0EwHhcNMjQwMTAyMTY1
NjU5WhcNMjUxMDAxMjM1OTU5WjCBhDELMAkGA1UEBhMCREUxEzARBgNVBAgMClRo
dWVyaW5nZW4xEzARBgNVBAcMClJ1ZG9sc3RhZHQxGTAXBgNVBAoMEERhbWFzY2hr
ZXN0ci4gMTExFjAUBgNVBAsMDUFyYmVpdHN6aW1tZXIxGDAWBgNVBAMMDyoucGkt
ZG9ja2VyLmxhYjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOQcvB6q
6KUaFpj2m63RvoitLoLFIu9+39RxBpBKA70NUT3Cv1Le0wgXS1CUId5Dg4p3MhOh
nafby4c/1dQzj+SbZM5xOTvqRZJFt/JGeIUiy95xciD6FNbus7XPEotHdxihSG6E
rhQ3BlUPznzViiY+dJrw5jcKkq3ZsnLKL8AY4j5j1khyIFPwe/UGUxbIpRMAlH1w
4nPuNS7ZOy6ntKIrOGLkRdCAVrylqRt5nA7GBezYyfg+6NGn3nSPItlr3Mz4pP+W
AZOSUkgbxPNq/KwC+Lv3RC+XaoPORO6dEgIHymVtvC3Khon3ZUJ9fs2yoDdz91CR
WUyKpn91sSkePHBbV7MJ+65yBQKeTQepF87NwIWIGmKHhcSLfX/tWIDUrVUMEOfv
Et2jAs/lOuQE+g+bpV0WI9ySVWug0j+kG0/AZwjJxmKVwDCiDf74N/yCS0BTvn69
ZsC1/KEO6kl1Aelduvsf/BEvWM4/wFIa7YXizQIRQzWDyJazm/CcMgaqZIT/133e
gZ3qD7vO9ftxtSnQiBaavVJbEvOasxrDJrkj0D9ngCr2ZnrEIaAYUWhUCmUnM4B1
JeyQw7h6i0t0xeEN16Hn0xIJqAV+lTIpg8LYl/6m0sb7t3phguR9E9BYBpb6meKo
9ScvsBNzmql4CwsGURyh2Bn2geOYZ8GgZKK9AgMBAAGjggE/MIIBOzAOBgNVHQ8B
Af8EBAMCBaAwCQYDVR0TBAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUH
AwIwHQYDVR0OBBYEFOmbb2+3quZWrGJSNTfqZmnN9GxJMB8GA1UdIwQYMBaAFNdo
ttylUfHTDN0pzUAEO+FS0t8/MFYGCCsGAQUFBwEBBEowSDBGBggrBgEFBQcwAoY6
aHR0cHM6Ly9lbGJvc3NvLmdpdGh1Yi5pby94NTA5Ly9EYW1hMTFfQ29tcG9uZW50
X0NBLWNhLmNydDBLBgNVHR8ERDBCMECgPqA8hjpodHRwczovL2VsYm9zc28uZ2l0
aHViLmlvL3g1MDkvL0RhbWExMV9Db21wb25lbnRfQ0EtY2EuY3JsMBoGA1UdEQQT
MBGCDyoucGktZG9ja2VyLmxhYjANBgkqhkiG9w0BAQ0FAAOCAgEAO3W18dy6uIjM
UyrlJ7xYj/gJTSpLPpGlRi+AgJROO9HlaBs5lIkSIm/9DvfiI/5Gqc5dAprqpeMk
jvpbBiETyO3pbSuNy8+PkAN8ESrvbZm1XTJN3s8v9JQjhZjQG3Ow4OW+LZmWHJFr
AUnLxhABANjGC15TRaNgU/gEsKsg1N3UPdopzmpBayBA/DrSrTI5eFB+LnCPxza8
EcRd1nooX4PuQvOzH+djRgfc+jdpqX+dDk3Dr19M9tyJT/o95QIHHh3a4sMvPlwe
hcjqQd+LdZVEaEXeSs4ehixEtjJhQvZe27ACG5liauPx48VkdHZts0w510aunobi
IkRpvs00zU+mKVViR7ahCtI9VomqwTW1vf90VeMHf5hPLuXrZhrWhX+Tgu+O14bK
4whuTkAM8K19NFgT5FNoAuOCa5y9KnYMPPxB3nCUN+m7iZ9xA8lXEJDJI5F8Hf5M
o/kSfoxl260Ig2OXG1qMmTxTv9OUS/pYGMfK/yo35F8RDSboayn1P9IiIfFxT47U
/+Laxef5l/vpLW5AoK09Re3QTq+cq4aKX8DKpAIbqpVQSUrxhkH/I3vEeMzEqw+2
UjS8yiGNJYvH3fJwHofa+hPyHUy3Xlu3DFqdWnz6dROKoqNpYr+Xwzkv6HKrTh74
cung58jIpMkRM5zTu1wkpRnHGfRWgtQ=
-----END CERTIFICATE-----
Diese Beispiele lassen sich mit entsprechenden Werkzeugen genauer inspizieren - auch online.
Wenn man in Betracht zieht, dass QR-Codes eine maximale Datenkapazität von 23648 Bit haben - und damit zum Beispiel 4296 alphanumerische Zeichen darstellen können sieht man bereits, wohin mein Vorschlag zielt: Auf einem System, das die Certificate Signing Requests entgegennimmt werden diese in QR-Codes umgewandelt und angezeigt - das air-gapped System der eigentlichen CA ist mit einem entsprechenden Lesegerät ausgerüstet, über den der CSR eingelesen wird. Anschließend wird er ganz normal prozessiert und das erzeugte Zertifikat wird auf dem Bildschirm angezeigt, von dem es widerum mit einem entsprechenden Lesegerät gescannt und dem Antragsteller anschließend zur Verfügung gestellt wird.
Hier zwei Beispiele - das erste ist der oben angegebene CSR als QR-Code, das zweite ist das erste der beiden Beispiel-Zertifikate. Man kann diese und ähnliche Beispiele auch selbst ausprobieren - ich empfehle zur Erzeugung der QR-Codes Admin-Forge.
Certificate Signing Request als QR-Code
x509v3 Zertifikat als QR-Code
NullPointer in FontConfig in Alpine-Java-Docker
30.08.2020
Ich habe nach zwei Tagen herumprobieren doch wieder ein Ticket auf GitHub eröffnet.
WeiterlesenAndroid Basteln C und C++ Chaos Datenbanken Docker dWb+ ESP Wifi Garten Geo Go GUI Gui Hardware Java Java. Komponenten Jupyter JupyterBinder Komponenten Links Linux Markdown Markup Music Numerik OpenSource PKI-X.509-CA Präsentationen Python QBrowser Rants Raspi Revisited Security Software-Test sQLshell TeleGrafana Verschiedenes Video Virtualisierung Windows Upcoming...
Ich habe bereits seit einiger Zeit immer mal wieder vor, die in meinen Bastelschränken und auf meinem Schreibtisch vorhandenen Hardwarekomponenten sauber zu inventarisieren. Alle meine bisherigen Versuche schlugen jedoch fehl, da ich mich bisher darauf fokussierte, eine self-hosted Anwendung dafür zu finden. Allerdings sind mir die üblichen Verdächtigen entweder zu schwergewichtig oder zu unflexibel. Ich kam aber auf eine (für mich) neue Idee:
WeiterlesenIch habe den Generator für meine Heimatseite im Zwischennetz wieder um ein neues Feture erweitert.
WeiterlesenIch habe nun seit geraumer Zeit NeoVim im Einsatz im Produktivbetrieb zum Entwickeln - nicht nur - von Software. Dabei hat sich gezeigt, dass ich meinem Ziel, der Philosophie des Einsatzes möglichst weniger Plugins immer näher komme:
WeiterlesenManche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.
Wer daran teilhaben und eventuell sogar davon profitieren möchte, muss damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.
Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...
PS: Meine öffentlichen Codeberg-Repositories findet man hier.