Skip to content

Commit

Permalink
Merge pull request #87 from gematik/feature/konnektor-workarounds
Browse files Browse the repository at this point in the history
Beschreibung von Workarounds für secunet Konnektoren
  • Loading branch information
florianschoffke authored Oct 6, 2023
2 parents 686ab7e + 60c8b80 commit 59b4ed9
Show file tree
Hide file tree
Showing 6 changed files with 131 additions and 0 deletions.
28 changes: 28 additions & 0 deletions docs/ti_configuration.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -141,3 +141,31 @@ Name: erp.zentral.erp.splitdns.ti-dienste.de
Addresses: 100.102.28.10
100.102.29.10
....

== Fehlerbehandlung Konnektor

In besonderen Konstellationen kann es zu Fehlern im Verbindungsaufbau der TI kommen. Folgende Probleme und Workarounds wurden derzeit identifiziert und definiert.

=== Verwendung SMC-B G2 mit secunet Konnektor

==== Problemstellung
Der secunet Konnektor bietet Funktionalitäten an, welche die Migration von RSA zu ECC vorbereiten. Es ist zu beachten, dass Smartcards der Generation G2 (bspw. SMC-B) noch keine ECC Zertifikate beinhalten und somit kein ECC unterstützen können und somit der TLS-Verbindungsaufbau (bspw. zwischen Fachmodul VSDM und Intermediär VSDM) auf Basis ECC nicht funktioniert.

==== Lösung
Es ist bei der Verwendung von Smartcards G2 darauf zu achten, dass im Setting des secunet Konnektors für TLS die Verwendung von ECC-Ciphersuiten deaktiviert ist.

image:SMC-B_ECC_secunet_setting.png[width=100%]

=== Fehlerhafter VSDM Aufruf mit PN3

==== Problemstellung
Der VSDM++-Abruf für das Feature „eGK in der Apotheke“ führt in einigen Fällen zu einem Timeout. Dies äußert sich dadurch, dass der Abrufå etwa 25 Sekunden dauert und mit einem Prüfnachweis mit dem Code „3“ quittiert wird.

Dies betrifft nachweislich AVS-Systeme mit einem secunet-Konnektor. Andere Konfigurationen mit einem RISE- oder KoCo-Konnektor können ebenso von einer signifikanten Anzahl an Prüfnachweisen mit dem Code „3“ betroffen sein.

==== Lösung
Die Konnektor-Einstellung "nonQES-Authentifizierungstimeout" wird von 3 Sekunden auf 6 Sekunden erhöht. Das führt dazu, dass der Timeout für OCSP-Abfragen erhöht wird. Hierbei reduziert sich die Fehlerrate signifikant. Es ist darauf zu achten, dass dies nur von AVS zu implementieren ist, wenn die Operation ReadVSD() asynchon umgesetzt wird, da es sonst zu Seiteneffekten kommen kann.

Möglicherweise sind durch diese Einstellung auch andere TI-Anwendungen betroffen, bspw. KIM, VZD.

image:secunet-ocsp-timeout.png[width=100%]
28 changes: 28 additions & 0 deletions docs_sources/ti_configuration-source.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -131,3 +131,31 @@ Name: erp.zentral.erp.splitdns.ti-dienste.de
Addresses: 100.102.28.10
100.102.29.10
....

== Fehlerbehandlung Konnektor

In besonderen Konstellationen kann es zu Fehlern im Verbindungsaufbau der TI kommen. Folgende Probleme und Workarounds wurden derzeit identifiziert und definiert.

=== Verwendung SMC-B G2 mit secunet Konnektor

==== Problemstellung
Der secunet Konnektor bietet Funktionalitäten an, welche die Migration von RSA zu ECC vorbereiten. Es ist zu beachten, dass Smartcards der Generation G2 (bspw. SMC-B) noch keine ECC Zertifikate beinhalten und somit kein ECC unterstützen können und somit der TLS-Verbindungsaufbau (bspw. zwischen Fachmodul VSDM und Intermediär VSDM) auf Basis ECC nicht funktioniert.

==== Lösung
Es ist bei der Verwendung von Smartcards G2 darauf zu achten, dass im Setting des secunet Konnektors für TLS die Verwendung von ECC-Ciphersuiten deaktiviert ist.

image:SMC-B_ECC_secunet_setting.png[width=100%]

=== Fehlerhafter VSDM Aufruf mit PN3

==== Problemstellung
Der VSDM++-Abruf für das Feature „eGK in der Apotheke“ führt in einigen Fällen zu einem Timeout. Dies äußert sich dadurch, dass der Abrufå etwa 25 Sekunden dauert und mit einem Prüfnachweis mit dem Code „3“ quittiert wird.

Dies betrifft nachweislich AVS-Systeme mit einem secunet-Konnektor. Andere Konfigurationen mit einem RISE- oder KoCo-Konnektor können ebenso von einer signifikanten Anzahl an Prüfnachweisen mit dem Code „3“ betroffen sein.

==== Lösung
Die Konnektor-Einstellung "nonQES-Authentifizierungstimeout" wird von 3 Sekunden auf 6 Sekunden erhöht. Das führt dazu, dass der Timeout für OCSP-Abfragen erhöht wird. Hierbei reduziert sich die Fehlerrate signifikant. Es ist darauf zu achten, dass dies nur von AVS zu implementieren ist, wenn die Operation ReadVSD() asynchon umgesetzt wird, da es sonst zu Seiteneffekten kommen kann.

Möglicherweise sind durch diese Einstellung auch andere TI-Anwendungen betroffen, bspw. KIM, VZD.

image:secunet-ocsp-timeout.png[width=100%]
Binary file added images/SMC-B_ECC_secunet_setting.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/puml_fdv_zustaende_sequenz.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/secunet-ocsp-timeout.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
75 changes: 75 additions & 0 deletions puml/fdv_zustaende_sequenz.puml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
@startuml Aktualisierte Abgabeinformationen

actor Versicherter
participant "E-Rezept-Fachdienst" as FD
participant AVS
actor Apotheker

group E-Rezept abrufen
Versicherter -> Apotheker: Zeige Rezeptcode
Apotheker -> AVS: scanCode():E-Rezept-Token
AVS -> FD: POST /Task/<id>/$accept
FD -> FD: updateTaskStatus(id, 'in-progress')
FD -> AVS: E-Rezept
AVS -> Apotheker: showEPrescription()
end

group Bereitstellen der Dispensierinformationen
Apotheker -> AVS: dispenseMedication()
AVS -> FD: POST /Task/<id>/$dispense
FD -> FD: storeMedicationDispense()
FD -> FD: setReferenceForMedicationDispense()
FD -> FD: setLastModified()
FD -> FD: setLastMedicationDispense(currentTime())
FD --> AVS: ok
AVS --> Apotheker: ok
Apotheker -> Versicherter: Übergabe Medikament
end

group Aktualisierung der Dispensierinformationen
Versicherter -> Apotheker: Bitte um Aktualisierung der Dispensierinformation
Apotheker -> AVS: updateMedication()
AVS -> FD: POST /Task/<id>/$dispense
FD -> FD: replaceMedicationDispense()
FD -> FD: setReferenceForMedicationDispense()
FD -> FD: setLastModified()
FD -> FD: setLastMedicationDispense(currentTime())
FD --> AVS: ok
AVS --> Apotheker: ok
Apotheker -> Versicherter: Abgabe neues Medikament
end

group Löschen der Dispensierinformationen
Versicherter -> Apotheker: Bitte um Rückgabe
Apotheker -> Apotheker: Medikament zurücknehmen
Apotheker -> AVS: deleteDispense()
AVS -> FD: POST /Task/<id>/$reject
FD -> FD: deleteReferenceForMedicationDispense()
FD -> FD: deleteMedicationDispense()
FD -> FD: setLastModified()
FD -> FD: updateTaskStatus(id, 'ready')
FD --> AVS: ok
AVS --> Apotheker: ok
end

group E-Rezept löschen
Apotheker -> AVS: deletePrescription()
AVS -> FD: POST /Task/<id>/$abort
FD -> FD: deleteReferenceForMedicationDispense()
FD -> FD: deleteMedicationDispense()
FD -> FD: deleteEPrescription()
FD -> FD: deleteTask()
FD --> AVS: ok
AVS --> Apotheker: ok
end

group E-Rezept Abgabe vollziehen
Apotheker -> AVS: getReceipt()
AVS -> FD: POST /Task/<id>/$close
FD -> FD: updateTaskStatus(id, 'completed')
FD -> FD: generateReceipt()
FD -> AVS: ePrescriptionReceipt()
end


@enduml

0 comments on commit 59b4ed9

Please sign in to comment.