Skip to content

Commit a199941

Browse files
committed
[uss_qualifier] netrid: DSS0020 - check DSS endpoints are encrypted
1 parent dd28059 commit a199941

File tree

15 files changed

+225
-23
lines changed

15 files changed

+225
-23
lines changed
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
from urllib.parse import urlparse
2+
3+
import requests
4+
5+
from monitoring.uss_qualifier.resources.astm.f3411.dss import DSSInstanceResource
6+
from monitoring.uss_qualifier.scenarios.scenario import GenericTestScenario
7+
from monitoring.uss_qualifier.suites.suite import ExecutionContext
8+
9+
10+
class EndpointEncryption(GenericTestScenario):
11+
"""
12+
Ensures that the endpoints of a DSS are not accessible unencrypted.
13+
14+
TODO: also check that available ciphers are reasonable.
15+
"""
16+
17+
def __init__(
18+
self,
19+
dss: DSSInstanceResource,
20+
):
21+
super().__init__()
22+
self._dss = dss.dss_instance
23+
24+
def run(self, context: ExecutionContext):
25+
self.begin_test_scenario(context)
26+
27+
if not self._dss.base_url.startswith("https://"):
28+
self.record_note(
29+
"encrypted_endpoints",
30+
"Cannot check encryption requirement when DSS endpoint is specified with http:// URL",
31+
)
32+
self.end_test_scenario()
33+
return
34+
35+
self._case_http_unavailable_or_redirect()
36+
37+
self.end_test_scenario()
38+
39+
def _case_http_unavailable_or_redirect(self):
40+
self.begin_test_case("Connect to HTTP port")
41+
self.begin_test_step("Attempt to connect to the DSS instance on the HTTP port")
42+
43+
parsed_url = urlparse(self._dss.base_url)
44+
hostname = parsed_url.hostname
45+
46+
if hostname is not None:
47+
with self.check(
48+
"Connection to HTTP port fails or redirects to HTTPS port",
49+
self._dss.participant_id,
50+
) as check:
51+
try:
52+
response = requests.get(
53+
f"http://{hostname}/{parsed_url.path}",
54+
timeout=10,
55+
allow_redirects=False,
56+
)
57+
# If we can connect, we want to check that we are being redirected:
58+
if response.status_code not in [301, 308]:
59+
check.record_failed(
60+
"Connection to HTTP port did not redirect",
61+
details=f"Was expecting a 301 or 308 response, but obtained status code: {response.status_code}",
62+
)
63+
if "Location" not in response.headers:
64+
check.record_failed(
65+
"Location header missing in redirect response",
66+
details="Was expecting a Location header in the response, but it was not present",
67+
)
68+
if response.headers.get("Location").startswith("http://"):
69+
check.record_failed(
70+
"Connection to HTTP port redirected to HTTP",
71+
details=f"Was expecting a redirection to an https:// URL. Location header: {response.headers.get('Location')}",
72+
)
73+
if not response.headers.get("Location").startswith(
74+
f"https://{parsed_url.hostname}/{parsed_url.path}"
75+
):
76+
check.record_failed(
77+
"Redirect to unexpected destination",
78+
details=f"Was expecting a redirection to https://{parsed_url.hostname}/{parsed_url.path}, was {response.headers.get('Location')}",
79+
)
80+
except requests.RequestException:
81+
# Connection was impossible: all is good
82+
pass
83+
84+
self.end_test_step()
85+
self.end_test_case()

monitoring/uss_qualifier/scenarios/astm/netrid/v19/dss/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@
77
from .token_validation import TokenValidation
88
from .crdb_access import CRDBAccess
99
from .heavy_traffic_concurrent import HeavyTrafficConcurrent
10+
from .endpoint_encryption import EndpointEncryption
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# ASTM NetRID DSS: Endpoint encryption test scenario
2+
3+
## Overview
4+
5+
Ensures that a DSS only exposes its endpoints via HTTPS.
6+
7+
## Resources
8+
9+
### dss
10+
11+
[`DSSInstanceResource`](../../../../../resources/astm/f3411/dss.py) to be tested in this scenario.
12+
13+
14+
## Connect to HTTP port test case
15+
16+
Tries to connect to the http port (80) of the DSS instance, and expects either a refusal of the connection,
17+
or a redirection to the https port (443).
18+
19+
Note: this test case will be skipped if the DSS instance is configured to use HTTP.
20+
21+
### Attempt to connect to the DSS instance on the HTTP port test step
22+
23+
#### 🛑 Connection to HTTP port fails or redirects to HTTPS port check
24+
25+
If the DSS instance accepts the connection on the HTTP port and does not immediately redirect to the HTTPS port
26+
upon reception of an HTTP request, it is in violation of **[astm.f3411.v19.DSS0020](../../../../../requirements/astm/f3411/v19.md)**.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from monitoring.uss_qualifier.scenarios.astm.netrid.common.dss.endpoint_encryption import (
2+
EndpointEncryption as CommonEndpointEncryption,
3+
)
4+
from monitoring.uss_qualifier.scenarios.scenario import TestScenario
5+
6+
7+
class EndpointEncryption(TestScenario, CommonEndpointEncryption):
8+
pass
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# ASTM NetRID DSS: Endpoint encryption test scenario
2+
3+
## Overview
4+
5+
Ensures that a DSS only exposes its endpoints via HTTPS.
6+
7+
## Resources
8+
9+
### dss
10+
11+
[`DSSInstanceResource`](../../../../../resources/astm/f3411/dss.py) to be tested in this scenario.
12+
13+
## Connect to HTTP port test case
14+
15+
Tries to connect to the http port (80) of the DSS instance, and expects either a refusal of the connection,
16+
or a redirection to the https port (443).
17+
18+
Note: this test case will be skipped if the DSS instance is configured to use HTTP.
19+
20+
### Attempt to connect to the DSS instance on the HTTP port test step
21+
22+
#### 🛑 Connection to HTTP port fails or redirects to HTTPS port check
23+
24+
If the DSS instance accepts the connection on the HTTP port and does not immediately redirect to the HTTPS port
25+
upon reception of an HTTP request, it is in violation of **[astm.f3411.v22a.DSS0020](../../../../../requirements/astm/f3411/v22a.md)**.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from monitoring.uss_qualifier.scenarios.astm.netrid.common.dss.endpoint_encryption import (
2+
EndpointEncryption as CommonEndpointEncryption,
3+
)
4+
from monitoring.uss_qualifier.scenarios.scenario import TestScenario
5+
6+
7+
class EndpointEncryption(TestScenario, CommonEndpointEncryption):
8+
pass

monitoring/uss_qualifier/suites/astm/netrid/f3411_19.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,16 @@
2121
<th><a href="../../README.md#checked-in">Checked in</a></th>
2222
</tr>
2323
<tr>
24-
<td rowspan="62" style="vertical-align:top;"><a href="../../../requirements/astm/f3411/v19.md">astm<br>.f3411<br>.v19</a></td>
24+
<td rowspan="63" style="vertical-align:top;"><a href="../../../requirements/astm/f3411/v19.md">astm<br>.f3411<br>.v19</a></td>
2525
<td><a href="../../../requirements/astm/f3411/v19.md">DSS0010</a></td>
2626
<td>Implemented</td>
2727
<td><a href="../../../scenarios/astm/netrid/v19/dss/token_validation.md">ASTM NetRID DSS: Token Validation</a></td>
2828
</tr>
29+
<tr>
30+
<td><a href="../../../requirements/astm/f3411/v19.md">DSS0020</a></td>
31+
<td>Implemented</td>
32+
<td><a href="../../../scenarios/astm/netrid/v19/dss/endpoint_encryption.md">ASTM NetRID DSS: Endpoint encryption</a></td>
33+
</tr>
2934
<tr>
3035
<td><a href="../../../requirements/astm/f3411/v19.md">DSS0030,a</a></td>
3136
<td>Implemented</td>

monitoring/uss_qualifier/suites/astm/netrid/f3411_19/dss_probing.md

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,17 @@
44

55
## [Actions](../../../README.md#actions)
66

7-
1. Scenario: [ASTM NetRID DSS: Simple ISA](../../../../scenarios/astm/netrid/v19/dss/isa_simple.md) ([`scenarios.astm.netrid.v19.dss.ISASimple`](../../../../scenarios/astm/netrid/v19/dss/isa_simple.py))
8-
2. Scenario: [ASTM NetRID DSS: Submitted ISA Validations](../../../../scenarios/astm/netrid/v19/dss/isa_validation.md) ([`scenarios.astm.netrid.v19.dss.ISAValidation`](../../../../scenarios/astm/netrid/v19/dss/isa_validation.py))
9-
3. Scenario: [ASTM NetRID DSS: ISA Expiry](../../../../scenarios/astm/netrid/v19/dss/isa_expiry.md) ([`scenarios.astm.netrid.v19.dss.ISAExpiry`](../../../../scenarios/astm/netrid/v19/dss/isa_expiry.py))
10-
4. Scenario: [ASTM NetRID DSS: ISA Subscription Interactions](../../../../scenarios/astm/netrid/v19/dss/isa_subscription_interactions.md) ([`scenarios.astm.netrid.v19.dss.ISASubscriptionInteractions`](../../../../scenarios/astm/netrid/v19/dss/isa_subscription_interactions.py))
11-
5. Scenario: [ASTM NetRID DSS: Subscription Validation](../../../../scenarios/astm/netrid/v19/dss/subscription_validation.md) ([`scenarios.astm.netrid.v19.dss.SubscriptionValidation`](../../../../scenarios/astm/netrid/v19/dss/subscription_validation.py))
12-
6. Scenario: [ASTM NetRID DSS: Subscription Simple](../../../../scenarios/astm/netrid/v19/dss/subscription_simple.md) ([`scenarios.astm.netrid.v19.dss.SubscriptionSimple`](../../../../scenarios/astm/netrid/v19/dss/subscription_simple.py))
13-
7. Scenario: [ASTM F3411-19 NetRID DSS interoperability](../../../../scenarios/astm/netrid/v19/dss_interoperability.md) ([`scenarios.astm.netrid.v19.DSSInteroperability`](../../../../scenarios/astm/netrid/v19/dss_interoperability.py))
14-
8. Scenario: [ASTM NetRID DSS: Token Validation](../../../../scenarios/astm/netrid/v19/dss/token_validation.md) ([`scenarios.astm.netrid.v19.dss.TokenValidation`](../../../../scenarios/astm/netrid/v19/dss/token_validation.py))
15-
9. Scenario: [ASTM NetRID DSS: Direct CRDB access](../../../../scenarios/astm/netrid/v19/dss/crdb_access.md) ([`scenarios.astm.netrid.v19.dss.CRDBAccess`](../../../../scenarios/astm/netrid/v19/dss/crdb_access.py))
16-
10. Scenario: [ASTM NetRID DSS: Concurrent Requests](../../../../scenarios/astm/netrid/v19/dss/heavy_traffic_concurrent.md) ([`scenarios.astm.netrid.v19.dss.HeavyTrafficConcurrent`](../../../../scenarios/astm/netrid/v19/dss/heavy_traffic_concurrent.py))
7+
1. Scenario: [ASTM NetRID DSS: Endpoint encryption](../../../../scenarios/astm/netrid/v19/dss/endpoint_encryption.md) ([`scenarios.astm.netrid.v19.dss.EndpointEncryption`](../../../../scenarios/astm/netrid/v19/dss/endpoint_encryption.py))
8+
2. Scenario: [ASTM NetRID DSS: Simple ISA](../../../../scenarios/astm/netrid/v19/dss/isa_simple.md) ([`scenarios.astm.netrid.v19.dss.ISASimple`](../../../../scenarios/astm/netrid/v19/dss/isa_simple.py))
9+
3. Scenario: [ASTM NetRID DSS: Submitted ISA Validations](../../../../scenarios/astm/netrid/v19/dss/isa_validation.md) ([`scenarios.astm.netrid.v19.dss.ISAValidation`](../../../../scenarios/astm/netrid/v19/dss/isa_validation.py))
10+
4. Scenario: [ASTM NetRID DSS: ISA Expiry](../../../../scenarios/astm/netrid/v19/dss/isa_expiry.md) ([`scenarios.astm.netrid.v19.dss.ISAExpiry`](../../../../scenarios/astm/netrid/v19/dss/isa_expiry.py))
11+
5. Scenario: [ASTM NetRID DSS: ISA Subscription Interactions](../../../../scenarios/astm/netrid/v19/dss/isa_subscription_interactions.md) ([`scenarios.astm.netrid.v19.dss.ISASubscriptionInteractions`](../../../../scenarios/astm/netrid/v19/dss/isa_subscription_interactions.py))
12+
6. Scenario: [ASTM NetRID DSS: Subscription Validation](../../../../scenarios/astm/netrid/v19/dss/subscription_validation.md) ([`scenarios.astm.netrid.v19.dss.SubscriptionValidation`](../../../../scenarios/astm/netrid/v19/dss/subscription_validation.py))
13+
7. Scenario: [ASTM NetRID DSS: Subscription Simple](../../../../scenarios/astm/netrid/v19/dss/subscription_simple.md) ([`scenarios.astm.netrid.v19.dss.SubscriptionSimple`](../../../../scenarios/astm/netrid/v19/dss/subscription_simple.py))
14+
8. Scenario: [ASTM F3411-19 NetRID DSS interoperability](../../../../scenarios/astm/netrid/v19/dss_interoperability.md) ([`scenarios.astm.netrid.v19.DSSInteroperability`](../../../../scenarios/astm/netrid/v19/dss_interoperability.py))
15+
9. Scenario: [ASTM NetRID DSS: Token Validation](../../../../scenarios/astm/netrid/v19/dss/token_validation.md) ([`scenarios.astm.netrid.v19.dss.TokenValidation`](../../../../scenarios/astm/netrid/v19/dss/token_validation.py))
16+
10. Scenario: [ASTM NetRID DSS: Direct CRDB access](../../../../scenarios/astm/netrid/v19/dss/crdb_access.md) ([`scenarios.astm.netrid.v19.dss.CRDBAccess`](../../../../scenarios/astm/netrid/v19/dss/crdb_access.py))
17+
11. Scenario: [ASTM NetRID DSS: Concurrent Requests](../../../../scenarios/astm/netrid/v19/dss/heavy_traffic_concurrent.md) ([`scenarios.astm.netrid.v19.dss.HeavyTrafficConcurrent`](../../../../scenarios/astm/netrid/v19/dss/heavy_traffic_concurrent.py))
1718

1819
## [Checked requirements](../../../README.md#checked-requirements)
1920

@@ -25,11 +26,16 @@
2526
<th><a href="../../../README.md#checked-in">Checked in</a></th>
2627
</tr>
2728
<tr>
28-
<td rowspan="38" style="vertical-align:top;"><a href="../../../../requirements/astm/f3411/v19.md">astm<br>.f3411<br>.v19</a></td>
29+
<td rowspan="39" style="vertical-align:top;"><a href="../../../../requirements/astm/f3411/v19.md">astm<br>.f3411<br>.v19</a></td>
2930
<td><a href="../../../../requirements/astm/f3411/v19.md">DSS0010</a></td>
3031
<td>Implemented</td>
3132
<td><a href="../../../../scenarios/astm/netrid/v19/dss/token_validation.md">ASTM NetRID DSS: Token Validation</a></td>
3233
</tr>
34+
<tr>
35+
<td><a href="../../../../requirements/astm/f3411/v19.md">DSS0020</a></td>
36+
<td>Implemented</td>
37+
<td><a href="../../../../scenarios/astm/netrid/v19/dss/endpoint_encryption.md">ASTM NetRID DSS: Endpoint encryption</a></td>
38+
</tr>
3339
<tr>
3440
<td><a href="../../../../requirements/astm/f3411/v19.md">DSS0030,a</a></td>
3541
<td>Implemented</td>

monitoring/uss_qualifier/suites/astm/netrid/f3411_19/dss_probing.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ resources:
99
problematically_big_area: resources.VerticesResource
1010
test_exclusions: resources.dev.TestExclusionsResource?
1111
actions:
12+
- test_scenario:
13+
scenario_type: scenarios.astm.netrid.v19.dss.EndpointEncryption
14+
resources:
15+
dss: dss
1216
- test_scenario:
1317
scenario_type: scenarios.astm.netrid.v19.dss.ISASimple
1418
resources:

monitoring/uss_qualifier/suites/astm/netrid/f3411_22a.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@
2020
<th><a href="../../README.md#status">Status</a></th>
2121
<th><a href="../../README.md#checked-in">Checked in</a></th>
2222
</tr>
23+
<tr>
24+
<td rowspan="1" style="vertical-align:top;"><a href="../../../requirements/astm/f3411/v19.md">astm<br>.f3411<br>.v19</a></td>
25+
<td><a href="../../../requirements/astm/f3411/v19.md">DSS0020</a></td>
26+
<td>Implemented</td>
27+
<td><a href="../../../scenarios/astm/netrid/v19/dss/endpoint_encryption.md">ASTM NetRID DSS: Endpoint encryption</a></td>
28+
</tr>
2329
<tr>
2430
<td rowspan="87" style="vertical-align:top;"><a href="../../../requirements/astm/f3411/v22a.md">astm<br>.f3411<br>.v22a</a></td>
2531
<td><a href="../../../requirements/astm/f3411/v22a.md">DSS0010</a></td>

monitoring/uss_qualifier/suites/astm/netrid/f3411_22a/dss_probing.md

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,17 @@
44

55
## [Actions](../../../README.md#actions)
66

7-
1. Scenario: [ASTM NetRID DSS: Simple ISA](../../../../scenarios/astm/netrid/v22a/dss/isa_simple.md) ([`scenarios.astm.netrid.v22a.dss.ISASimple`](../../../../scenarios/astm/netrid/v22a/dss/isa_simple.py))
8-
2. Scenario: [ASTM NetRID DSS: Submitted ISA Validations](../../../../scenarios/astm/netrid/v22a/dss/isa_validation.md) ([`scenarios.astm.netrid.v22a.dss.ISAValidation`](../../../../scenarios/astm/netrid/v22a/dss/isa_validation.py))
9-
3. Scenario: [ASTM NetRID DSS: ISA Expiry](../../../../scenarios/astm/netrid/v22a/dss/isa_expiry.md) ([`scenarios.astm.netrid.v22a.dss.ISAExpiry`](../../../../scenarios/astm/netrid/v22a/dss/isa_expiry.py))
10-
4. Scenario: [ASTM NetRID DSS: ISA Subscription Interactions](../../../../scenarios/astm/netrid/v22a/dss/isa_subscription_interactions.md) ([`scenarios.astm.netrid.v22a.dss.ISASubscriptionInteractions`](../../../../scenarios/astm/netrid/v22a/dss/isa_subscription_interactions.py))
11-
5. Scenario: [ASTM NetRID DSS: Subscription Validation](../../../../scenarios/astm/netrid/v22a/dss/subscription_validation.md) ([`scenarios.astm.netrid.v22a.dss.SubscriptionValidation`](../../../../scenarios/astm/netrid/v22a/dss/subscription_validation.py))
12-
6. Scenario: [ASTM NetRID DSS: Subscription Simple](../../../../scenarios/astm/netrid/v22a/dss/subscription_simple.md) ([`scenarios.astm.netrid.v22a.dss.SubscriptionSimple`](../../../../scenarios/astm/netrid/v22a/dss/subscription_simple.py))
13-
7. Scenario: [ASTM F3411-22a NetRID DSS interoperability](../../../../scenarios/astm/netrid/v22a/dss_interoperability.md) ([`scenarios.astm.netrid.v22a.DSSInteroperability`](../../../../scenarios/astm/netrid/v22a/dss_interoperability.py))
14-
8. Scenario: [ASTM NetRID DSS: Token Validation](../../../../scenarios/astm/netrid/v22a/dss/token_validation.md) ([`scenarios.astm.netrid.v22a.dss.TokenValidation`](../../../../scenarios/astm/netrid/v22a/dss/token_validation.py))
15-
9. Scenario: [ASTM NetRID DSS: Direct CRDB access](../../../../scenarios/astm/netrid/v22a/dss/crdb_access.md) ([`scenarios.astm.netrid.v22a.dss.CRDBAccess`](../../../../scenarios/astm/netrid/v22a/dss/crdb_access.py))
16-
10. Scenario: [ASTM NetRID DSS: Concurrent Requests](../../../../scenarios/astm/netrid/v22a/dss/heavy_traffic_concurrent.md) ([`scenarios.astm.netrid.v22a.dss.HeavyTrafficConcurrent`](../../../../scenarios/astm/netrid/v22a/dss/heavy_traffic_concurrent.py))
7+
1. Scenario: [ASTM NetRID DSS: Endpoint encryption](../../../../scenarios/astm/netrid/v19/dss/endpoint_encryption.md) ([`scenarios.astm.netrid.v19.dss.EndpointEncryption`](../../../../scenarios/astm/netrid/v19/dss/endpoint_encryption.py))
8+
2. Scenario: [ASTM NetRID DSS: Simple ISA](../../../../scenarios/astm/netrid/v22a/dss/isa_simple.md) ([`scenarios.astm.netrid.v22a.dss.ISASimple`](../../../../scenarios/astm/netrid/v22a/dss/isa_simple.py))
9+
3. Scenario: [ASTM NetRID DSS: Submitted ISA Validations](../../../../scenarios/astm/netrid/v22a/dss/isa_validation.md) ([`scenarios.astm.netrid.v22a.dss.ISAValidation`](../../../../scenarios/astm/netrid/v22a/dss/isa_validation.py))
10+
4. Scenario: [ASTM NetRID DSS: ISA Expiry](../../../../scenarios/astm/netrid/v22a/dss/isa_expiry.md) ([`scenarios.astm.netrid.v22a.dss.ISAExpiry`](../../../../scenarios/astm/netrid/v22a/dss/isa_expiry.py))
11+
5. Scenario: [ASTM NetRID DSS: ISA Subscription Interactions](../../../../scenarios/astm/netrid/v22a/dss/isa_subscription_interactions.md) ([`scenarios.astm.netrid.v22a.dss.ISASubscriptionInteractions`](../../../../scenarios/astm/netrid/v22a/dss/isa_subscription_interactions.py))
12+
6. Scenario: [ASTM NetRID DSS: Subscription Validation](../../../../scenarios/astm/netrid/v22a/dss/subscription_validation.md) ([`scenarios.astm.netrid.v22a.dss.SubscriptionValidation`](../../../../scenarios/astm/netrid/v22a/dss/subscription_validation.py))
13+
7. Scenario: [ASTM NetRID DSS: Subscription Simple](../../../../scenarios/astm/netrid/v22a/dss/subscription_simple.md) ([`scenarios.astm.netrid.v22a.dss.SubscriptionSimple`](../../../../scenarios/astm/netrid/v22a/dss/subscription_simple.py))
14+
8. Scenario: [ASTM F3411-22a NetRID DSS interoperability](../../../../scenarios/astm/netrid/v22a/dss_interoperability.md) ([`scenarios.astm.netrid.v22a.DSSInteroperability`](../../../../scenarios/astm/netrid/v22a/dss_interoperability.py))
15+
9. Scenario: [ASTM NetRID DSS: Token Validation](../../../../scenarios/astm/netrid/v22a/dss/token_validation.md) ([`scenarios.astm.netrid.v22a.dss.TokenValidation`](../../../../scenarios/astm/netrid/v22a/dss/token_validation.py))
16+
10. Scenario: [ASTM NetRID DSS: Direct CRDB access](../../../../scenarios/astm/netrid/v22a/dss/crdb_access.md) ([`scenarios.astm.netrid.v22a.dss.CRDBAccess`](../../../../scenarios/astm/netrid/v22a/dss/crdb_access.py))
17+
11. Scenario: [ASTM NetRID DSS: Concurrent Requests](../../../../scenarios/astm/netrid/v22a/dss/heavy_traffic_concurrent.md) ([`scenarios.astm.netrid.v22a.dss.HeavyTrafficConcurrent`](../../../../scenarios/astm/netrid/v22a/dss/heavy_traffic_concurrent.py))
1718

1819
## [Checked requirements](../../../README.md#checked-requirements)
1920

@@ -24,6 +25,12 @@
2425
<th><a href="../../../README.md#status">Status</a></th>
2526
<th><a href="../../../README.md#checked-in">Checked in</a></th>
2627
</tr>
28+
<tr>
29+
<td rowspan="1" style="vertical-align:top;"><a href="../../../../requirements/astm/f3411/v19.md">astm<br>.f3411<br>.v19</a></td>
30+
<td><a href="../../../../requirements/astm/f3411/v19.md">DSS0020</a></td>
31+
<td>Implemented</td>
32+
<td><a href="../../../../scenarios/astm/netrid/v19/dss/endpoint_encryption.md">ASTM NetRID DSS: Endpoint encryption</a></td>
33+
</tr>
2734
<tr>
2835
<td rowspan="39" style="vertical-align:top;"><a href="../../../../requirements/astm/f3411/v22a.md">astm<br>.f3411<br>.v22a</a></td>
2936
<td><a href="../../../../requirements/astm/f3411/v22a.md">DSS0010</a></td>

0 commit comments

Comments
 (0)