Skip to content

Commit 5cdfe04

Browse files
CSHARP-3936: Support KMIP in client side field level encryption. (#675)
CSHARP-3936: Support KMIP in client side field level encryption.
1 parent b61a333 commit 5cdfe04

33 files changed

+6694
-361
lines changed

build.cake

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ Task("TestLoadBalanced")
403403
Task("TestLoadBalancedNetStandard20").IsDependentOn("TestLoadBalanced");
404404
Task("TestLoadBalancedNetStandard21").IsDependentOn("TestLoadBalanced");
405405

406-
Task("TestCsfleKmsTls")
406+
Task("TestCsfleWithMockedKms")
407407
.IsDependentOn("Build")
408408
.DoesForEach(
409409
GetFiles("./**/*.Tests.csproj"),
@@ -416,13 +416,14 @@ Task("TestCsfleKmsTls")
416416
Configuration = configuration,
417417
Loggers = CreateLoggers(),
418418
ArgumentCustomization = args => args.Append("-- RunConfiguration.TargetPlatform=x64"),
419-
Filter = "Category=\"CsfleKmsTls\""
419+
Filter = "Category=\"CSFLE\""
420420
};
421421

422422
switch (target.ToLowerInvariant()) // target can be not only moniker related
423423
{
424-
case "testcsflekmstlsnetstandard20": settings.Framework = "netcoreapp2.1"; break;
425-
case "testcsflekmstlsnetstandard21": settings.Framework = "netcoreapp3.1"; break;
424+
case "testcsflewithmockedkmsnet472": settings.Framework = "net472"; break;
425+
case "testcsflewithmockedkmsnetstandard20": settings.Framework = "netcoreapp2.1"; break;
426+
case "testcsflewithmockedkmsnetstandard21": settings.Framework = "netcoreapp3.1"; break;
426427
}
427428

428429
DotNetCoreTest(
@@ -431,8 +432,9 @@ Task("TestCsfleKmsTls")
431432
);
432433
});
433434

434-
Task("TestCsfleKmsTlsNetStandard20").IsDependentOn("TestCsfleKmsTls");
435-
Task("TestCsfleKmsTlsNetStandard21").IsDependentOn("TestCsfleKmsTls");
435+
Task("TestCsfleWithMockedKmsnet472").IsDependentOn("TestCsfleWithMockedKms");
436+
Task("TestCsfleWithMockedKmsNetStandard20").IsDependentOn("TestCsfleWithMockedKms");
437+
Task("TestCsfleWithMockedKmsNetStandard21").IsDependentOn("TestCsfleWithMockedKms");
436438

437439
Task("Docs")
438440
.IsDependentOn("ApiDocs")

evergreen/add-certs-if-needed.sh renamed to evergreen/add-ca-certs.sh

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,13 @@ set -o xtrace # Write all commands first to stderr
44
set -o errexit # Exit the script with an error if any of the commands fail
55

66
# Supported/used environment variables:
7-
# SSL Set to enable SSL. Values are "ssl" / "nossl" (default)
87
# OCSP_TLS_SHOULD_SUCCEED Set to test OCSP. Values are true/false/nil
98
# OCSP_ALGORITHM Set to test OCSP. Values are rsa/ecdsa/nil
109
# OS Set to access operating system
1110

12-
SSL=${SSL:-nossl}
1311
OCSP_TLS_SHOULD_SUCCEED=${OCSP_TLS_SHOULD_SUCCEED:-nil}
1412
OCSP_ALGORITHM=${OCSP_ALGORITHM:-nil}
1513

16-
if [[ "$SSL" != "ssl" ]]; then
17-
exit 0
18-
fi
19-
2014
function make_trusted() {
2115
echo "CA.pem certificate $1"
2216
if [[ "$OS" =~ Windows|windows ]]; then

evergreen/cleanup-test-resources.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ set -o xtrace # Write all commands first to stderr
33
# Environment variables used as input:
44
# OS The current operating system
55

6-
echo "Attempt to kill mongocryptd process if presented"
7-
if [ "Windows_NT" = "$OS" ]; then
6+
echo "Attempt to kill mongocryptd process if presented on ${OS}"
7+
if [[ "$OS" =~ Windows|windows ]]; then
88
tasklist -FI "IMAGENAME eq mongocryptd.exe"
99
taskkill -F -FI "IMAGENAME eq mongocryptd.exe"
1010
# check that it's actually killed

evergreen/evergreen.yml

Lines changed: 111 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ functions:
259259
working_dir: "mongo-csharp-driver"
260260
script: |
261261
${PREPARE_SHELL}
262-
SSL=${SSL} OS=${OS} evergreen/add-certs-if-needed.sh
262+
OS=${OS} evergreen/add-ca-certs.sh
263263
AUTH="${AUTH}" SSL="${SSL}" \
264264
FRAMEWORK=${FRAMEWORK} \
265265
OS=${OS} \
@@ -291,9 +291,8 @@ functions:
291291
. ./evergreen/set-virtualenv.sh
292292
. ./evergreen/set-temp-fle-aws-creds.sh
293293
${PREPARE_SHELL}
294-
SSL=${SSL} \
295294
OS=${OS} \
296-
evergreen/add-certs-if-needed.sh
295+
evergreen/add-ca-certs.sh
297296
AUTH=${AUTH} \
298297
SSL=${SSL} \
299298
MONGODB_URI="${MONGODB_URI}" \
@@ -305,6 +304,38 @@ functions:
305304
FRAMEWORK=${FRAMEWORK} \
306305
evergreen/run-tests.sh
307306
echo "Skipping certificate removal..."
307+
OS=${OS} \
308+
evergreen/cleanup-test-resources.sh
309+
310+
run-csfle-tests-with-mocked-kms:
311+
- command: shell.exec
312+
type: test
313+
params:
314+
working_dir: "mongo-csharp-driver"
315+
script: |
316+
set +x
317+
export FLE_AWS_ACCESS_KEY_ID=${FLE_AWS_ACCESS_KEY_ID}
318+
export FLE_AWS_SECRET_ACCESS_KEY=${FLE_AWS_SECRET_ACCESS_KEY}
319+
export FLE_AZURE_TENANT_ID=${FLE_AZURE_TENANT_ID}
320+
export FLE_AZURE_CLIENT_ID=${FLE_AZURE_CLIENT_ID}
321+
export FLE_AZURE_CLIENT_SECRET=${FLE_AZURE_CLIENT_SECRET}
322+
export FLE_GCP_EMAIL=${FLE_GCP_EMAIL}
323+
export FLE_GCP_PRIVATE_KEY=${FLE_GCP_PRIVATE_KEY}
324+
export KMS_MOCK_SERVERS_ENABLED=true
325+
${PREPARE_SHELL}
326+
set +o xtrace
327+
OS=${OS} \
328+
evergreen/add-ca-certs.sh
329+
AUTH=${AUTH} \
330+
SSL=${SSL} \
331+
MONGODB_URI="${MONGODB_URI}" \
332+
TOPOLOGY=${TOPOLOGY} \
333+
OS=${OS} \
334+
CLIENT_PEM=${DRIVERS_TOOLS}/.evergreen/x509gen/client.pem \
335+
FRAMEWORK=${FRAMEWORK} \
336+
TARGET="TestCsfleWithMockedKms" \
337+
evergreen/run-tests.sh
338+
OS=${OS} \
308339
evergreen/cleanup-test-resources.sh
309340
310341
run-atlas-connectivity-tests:
@@ -507,8 +538,7 @@ functions:
507538
${PREPARE_SHELL}
508539
OCSP_TLS_SHOULD_SUCCEED="${OCSP_TLS_SHOULD_SUCCEED}" \
509540
OCSP_ALGORITHM=${OCSP_ALGORITHM} \
510-
SSL="ssl" \
511-
evergreen/add-certs-if-needed.sh
541+
evergreen/add-ca-certs.sh
512542
set +o xtrace
513543
AUTH="${AUTH}" \
514544
SSL="ssl" \
@@ -642,28 +672,39 @@ functions:
642672
bash ${DRIVERS_TOOLS}/.evergreen/serverless/delete-instance.sh
643673
fi
644674
645-
run-kms-tls-test:
675+
start-kms-mock-servers:
646676
- command: shell.exec
647-
type: test
648677
params:
649-
working_dir: "mongo-csharp-driver"
650678
script: |
651679
${PREPARE_SHELL}
652-
set +o xtrace
653-
# technically FLE_* vars are not needed, added just to reduce a number of changes in the code
654-
export FLE_AWS_ACCESS_KEY_ID=${FLE_AWS_ACCESS_KEY_ID}
655-
export FLE_AWS_SECRET_ACCESS_KEY=${FLE_AWS_SECRET_ACCESS_KEY}
656-
export FLE_AZURE_TENANT_ID=${FLE_AZURE_TENANT_ID}
657-
export FLE_AZURE_CLIENT_ID=${FLE_AZURE_CLIENT_ID}
658-
export FLE_AZURE_CLIENT_SECRET=${FLE_AZURE_CLIENT_SECRET}
659-
export FLE_GCP_EMAIL=${FLE_GCP_EMAIL}
660-
export FLE_GCP_PRIVATE_KEY=${FLE_GCP_PRIVATE_KEY}
661-
KMS_TLS_ERROR_TYPE="${KMS_TLS_ERROR_TYPE}" \
662-
MONGODB_URI="${MONGODB_URI}" \
663-
FRAMEWORK=${FRAMEWORK} \
664-
evergreen/run-kms-tls-tests.sh
680+
cd ${DRIVERS_TOOLS}/.evergreen/csfle
681+
. ./activate_venv.sh
682+
- command: shell.exec
683+
params:
684+
background: true
685+
script: |
686+
#expired client cert
687+
PYTHON=$(Venv="${DRIVERS_TOOLS}/.evergreen/csfle/kmstlsvenv" OS=${OS} ${PROJECT_DIRECTORY}/evergreen/get-python-path.sh);
688+
cd ${DRIVERS_TOOLS}/.evergreen/csfle
689+
$PYTHON -u kms_http_server.py -v --ca_file ../x509gen/ca.pem --cert_file ../x509gen/expired.pem --port 8000
690+
- command: shell.exec
691+
params:
692+
background: true
693+
script: |
694+
#wrong-host client cert
695+
PYTHON=$(Venv="${DRIVERS_TOOLS}/.evergreen/csfle/kmstlsvenv" OS=${OS} ${PROJECT_DIRECTORY}/evergreen/get-python-path.sh);
696+
cd ${DRIVERS_TOOLS}/.evergreen/csfle
697+
$PYTHON -u kms_http_server.py -v --ca_file ../x509gen/ca.pem --cert_file ../x509gen/wrong-host.pem --port 8001
698+
- command: shell.exec
699+
params:
700+
background: true
701+
script: |
702+
#server.pem client cert
703+
PYTHON=$(Venv="${DRIVERS_TOOLS}/.evergreen/csfle/kmstlsvenv" OS=${OS} ${PROJECT_DIRECTORY}/evergreen/get-python-path.sh);
704+
cd ${DRIVERS_TOOLS}/.evergreen/csfle
705+
$PYTHON -u kms_http_server.py -v --ca_file ../x509gen/ca.pem --cert_file ../x509gen/server.pem --port 8002 --require_client_cert
665706
666-
start-kms-mock-server:
707+
start-kms-kmip-server:
667708
- command: shell.exec
668709
params:
669710
script: |
@@ -674,8 +715,9 @@ functions:
674715
params:
675716
background: true
676717
script: |
718+
PYTHON=$(Venv="${DRIVERS_TOOLS}/.evergreen/csfle/kmstlsvenv" OS=${OS} ${PROJECT_DIRECTORY}/evergreen/get-python-path.sh);
677719
cd ${DRIVERS_TOOLS}/.evergreen/csfle
678-
./kmstlsvenv/bin/python3 -u kms_http_server.py -v --ca_file ../x509gen/ca.pem --cert_file ../x509gen/${BROKEN_CERT} --port 8000
720+
$PYTHON -u kms_kmip_server.py
679721
680722
publish-snapshot:
681723
- command: shell.exec
@@ -793,6 +835,33 @@ tasks:
793835
vars:
794836
FRAMEWORK: netstandard21
795837

838+
- name: test-kms-tls-mocked-net472
839+
commands:
840+
- func: start-kms-mock-servers
841+
- func: start-kms-kmip-server
842+
- func: bootstrap-mongo-orchestration
843+
- func: run-csfle-tests-with-mocked-kms
844+
vars:
845+
FRAMEWORK: net472
846+
847+
- name: test-kms-tls-mocked-netstandard20
848+
commands:
849+
- func: start-kms-mock-servers
850+
- func: start-kms-kmip-server
851+
- func: bootstrap-mongo-orchestration
852+
- func: run-csfle-tests-with-mocked-kms
853+
vars:
854+
FRAMEWORK: netstandard20
855+
856+
- name: test-kms-tls-mocked-netstandard21
857+
commands:
858+
- func: start-kms-mock-servers
859+
- func: start-kms-kmip-server
860+
- func: bootstrap-mongo-orchestration
861+
- func: run-csfle-tests-with-mocked-kms
862+
vars:
863+
FRAMEWORK: netstandard21
864+
796865
- name: test-load-balancer-netstandard20
797866
commands:
798867
- func: bootstrap-mongo-orchestration
@@ -922,44 +991,6 @@ tasks:
922991
vars:
923992
FRAMEWORK: netstandard21
924993

925-
- name: test-kms-tls-expired-certificate-netstandard21
926-
tags: ["kms-tls"]
927-
commands:
928-
- func: bootstrap-mongo-orchestration
929-
vars:
930-
TOPOLOGY: "server"
931-
AUTH: "noauth"
932-
SSL: "nossl"
933-
- func: start-kms-mock-server
934-
vars:
935-
BROKEN_CERT: "expired.pem"
936-
- func: run-kms-tls-test
937-
vars:
938-
TOPOLOGY: "server"
939-
AUTH: "noauth"
940-
SSL: "nossl"
941-
FRAMEWORK: netstandard21
942-
KMS_TLS_ERROR_TYPE: "expiredCertificate"
943-
944-
- name: test-kms-tls-invalid-host-netstandard21
945-
tags: ["kms-tls"]
946-
commands:
947-
- func: bootstrap-mongo-orchestration
948-
vars:
949-
TOPOLOGY: "server"
950-
AUTH: "noauth"
951-
SSL: "nossl"
952-
- func: start-kms-mock-server
953-
vars:
954-
BROKEN_CERT: "wrong-host.pem"
955-
- func: run-kms-tls-test
956-
vars:
957-
TOPOLOGY: "server"
958-
AUTH: "noauth"
959-
SSL: "nossl"
960-
FRAMEWORK: netstandard21
961-
KMS_TLS_ERROR_TYPE: "invalidHostname"
962-
963994
- name: test-ocsp-rsa-valid-cert-server-staples-ca-responder
964995
tags: ["ocsp"]
965996
commands:
@@ -1616,8 +1647,23 @@ buildvariants:
16161647
- name: test-gssapi-netstandard20
16171648
- name: test-gssapi-netstandard21
16181649

1619-
- matrix_name: "kms-tls-tests-linux"
1620-
matrix_spec: { os: "ubuntu-1804", version: [ "5.0" ], topology: ["standalone"] }
1621-
display_name: "CSFLE KMS TLS ${os}"
1650+
- matrix_name: "csfle-with-mocked-kms-tests-windows"
1651+
matrix_spec: { os: "windows-64", ssl: "nossl", version: [ "5.0" ], topology: ["standalone"] }
1652+
display_name: "CSFLE Mocked KMS ${os}"
1653+
tasks:
1654+
- name: test-kms-tls-mocked-net472
1655+
- name: test-kms-tls-mocked-netstandard20
1656+
- name: test-kms-tls-mocked-netstandard21
1657+
1658+
- matrix_name: "csfle-with-mocked-kms-tests-linux"
1659+
matrix_spec: { os: "ubuntu-1804", ssl: "nossl", version: [ "5.0" ], topology: ["standalone"] }
1660+
display_name: "CSFLE Mocked KMS ${os}"
1661+
tasks:
1662+
- name: test-kms-tls-mocked-netstandard20
1663+
- name: test-kms-tls-mocked-netstandard21
1664+
1665+
- matrix_name: "csfle-with-mocked-kms-tests-macOS"
1666+
matrix_spec: { os: "macos-1014", ssl: "nossl", version: [ "5.0" ], topology: ["standalone"] }
1667+
display_name: "CSFLE Mocked KMS ${os}"
16221668
tasks:
1623-
- name: ".kms-tls"
1669+
- name: test-kms-tls-mocked-netstandard21

evergreen/get-python-path.sh

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Find the version of python on the system.
2+
#
3+
# Environment variables used as input:
4+
# Venv Venv path
5+
# OS The current operating system
6+
#
7+
# Environment variables produced as output:
8+
# PYTHON The python path
9+
10+
# Don't write anything to output
11+
if [ -z "$Venv" ]; then
12+
if [ -e "/cygdrive/c/python/Python39/python" ]; then
13+
echo "/cygdrive/c/python/Python39/python"
14+
elif [ -e "/opt/mongodbtoolchain/v3/bin/python3" ]; then
15+
echo "/opt/mongodbtoolchain/v3/bin/python3"
16+
elif python3 --version >/dev/null 2>&1; then
17+
echo python3
18+
else
19+
echo python
20+
fi
21+
else
22+
if [[ "$OS" =~ Windows|windows ]]; then
23+
echo "${Venv}/Scripts/python"
24+
else
25+
echo "${Venv}/bin/python"
26+
fi
27+
fi

evergreen/run-kms-tls-tests.sh

Lines changed: 0 additions & 24 deletions
This file was deleted.

0 commit comments

Comments
 (0)