Skip to content

Commit 78f5014

Browse files
GODRIVER-2239 use source of PyKMIP (#1051)
* add script to generate elliptic curve certificates * GODRIVER-2239 do not use fork of PyKMIP Co-authored-by: Preston Vasquez <[email protected]>
1 parent e720278 commit 78f5014

File tree

10 files changed

+131
-11
lines changed

10 files changed

+131
-11
lines changed

.evergreen/config.yml

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -481,8 +481,8 @@ functions:
481481
export AWS_DEFAULT_REGION="us-east-1"
482482
483483
# Set client-side encryption credentials.
484-
export CSFLE_TLS_CA_FILE="$DRIVERS_TOOLS/.evergreen/x509gen/ca.pem"
485-
export CSFLE_TLS_CERTIFICATE_KEY_FILE="$DRIVERS_TOOLS/.evergreen/x509gen/client.pem"
484+
export CSFLE_TLS_CA_FILE="$PROJECT_DIRECTORY/data/kmip-certs/ca-ec.pem"
485+
export CSFLE_TLS_CERTIFICATE_KEY_FILE="$PROJECT_DIRECTORY/data/kmip-certs/client-ec.pem"
486486
487487
${PYTHON3_BINARY} -m venv ./venv
488488
./venv/${VENV_BIN_DIR|bin}/pip3 install boto3
@@ -940,9 +940,6 @@ functions:
940940
# only run this if virtualenv is installed
941941
if ${PYTHON3_BINARY} -m venv ./venv; then
942942
. ./activate_venv.sh
943-
944-
# TODO (GODRIVER-2239): Stabilize this pip install with a non-forked version of PyKMIP in
945-
pip install git+https://github.com/kevinAlbs/PyKMIP.git@expand_tls12_ciphers
946943
else
947944
echo "Python module venv not found, skipping virtual environment setup..."
948945
fi
@@ -952,9 +949,15 @@ functions:
952949
script: |
953950
cd ${DRIVERS_TOOLS}/.evergreen/csfle
954951
if [ "Windows_NT" = "$OS" ]; then
955-
kmstlsvenv/Scripts/python.exe -u kms_kmip_server.py --port 5698
952+
kmstlsvenv/Scripts/python.exe -u kms_kmip_server.py \
953+
--port 5698 \
954+
--ca_file "${PROJECT_DIRECTORY}/data/kmip-certs/ca-ec.pem" \
955+
--cert_file "${PROJECT_DIRECTORY}/data/kmip-certs/server-ec.pem"
956956
else
957-
./kmstlsvenv/bin/python3 -u kms_kmip_server.py --port 5698
957+
./kmstlsvenv/bin/python3 -u kms_kmip_server.py \
958+
--port 5698 \
959+
--ca_file "${PROJECT_DIRECTORY}/data/kmip-certs/ca-ec.pem" \
960+
--cert_file "${PROJECT_DIRECTORY}/data/kmip-certs/server-ec.pem"
958961
fi
959962
960963
run-kms-tls-test:
@@ -1007,8 +1010,8 @@ functions:
10071010
AZURE_CLIENT_SECRET="${cse_azure_client_secret}" \
10081011
GCP_EMAIL="${cse_gcp_email}" \
10091012
GCP_PRIVATE_KEY="${cse_gcp_private_key}" \
1010-
CSFLE_TLS_CA_FILE="$DRIVERS_TOOLS/.evergreen/x509gen/ca.pem"
1011-
CSFLE_TLS_CERTIFICATE_KEY_FILE="$DRIVERS_TOOLS/.evergreen/x509gen/client.pem"
1013+
CSFLE_TLS_CA_FILE="$PROJECT_DIRECTORY/data/kmip-certs/ca-ec.pem"
1014+
CSFLE_TLS_CERTIFICATE_KEY_FILE="$PROJECT_DIRECTORY/data/kmip-certs/client-ec.pem"
10121015
make evg-test-kmip \
10131016
PKG_CONFIG_PATH=$PKG_CONFIG_PATH \
10141017
LD_LIBRARY_PATH=$LD_LIBRARY_PATH

.evergreen/run-tests.sh

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,14 @@ else
9696
echo "crypt_shared library will be loaded from path: $CRYPT_SHARED_LIB_PATH"
9797
fi
9898

99+
CSFLE_TLS_CA_FILE="$(pwd)/data/kmip-certs/ca-ec.pem"
100+
CSFLE_TLS_CERTIFICATE_KEY_FILE="$(pwd)/data/kmip-certs/client-ec.pem"
101+
102+
if [ "Windows_NT" = "$OS" ]; then
103+
CSFLE_TLS_CA_FILE=$(cygpath -m $CSFLE_TLS_CA_FILE)
104+
CSFLE_TLS_CERTIFICATE_KEY_FILE=$(cygpath -m $CSFLE_TLS_CERTIFICATE_KEY_FILE)
105+
fi
106+
99107
AUTH=${AUTH} \
100108
SSL=${SSL} \
101109
MONGO_GO_DRIVER_CA_FILE=${MONGO_GO_DRIVER_CA_FILE} \
@@ -117,8 +125,8 @@ AZURE_CLIENT_ID="${cse_azure_client_id}" \
117125
AZURE_CLIENT_SECRET="${cse_azure_client_secret}" \
118126
GCP_EMAIL="${cse_gcp_email}" \
119127
GCP_PRIVATE_KEY="${cse_gcp_private_key}" \
120-
CSFLE_TLS_CA_FILE="$DRIVERS_TOOLS/.evergreen/x509gen/ca.pem" \
121-
CSFLE_TLS_CERTIFICATE_KEY_FILE="$DRIVERS_TOOLS/.evergreen/x509gen/client.pem" \
128+
CSFLE_TLS_CA_FILE="$CSFLE_TLS_CA_FILE" \
129+
CSFLE_TLS_CERTIFICATE_KEY_FILE="$CSFLE_TLS_CERTIFICATE_KEY_FILE" \
122130
CRYPT_SHARED_LIB_PATH=$CRYPT_SHARED_LIB_PATH \
123131
make evg-test \
124132
PKG_CONFIG_PATH=$PKG_CONFIG_PATH \

data/kmip-certs/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
These Elliptic Curve (EC) certificates were generated by running `etc/gen-ec-certs/gen-ec-certs.sh`.
2+
The EC certificates are used for testing the Go driver with PyKMIP.
3+
PyKMIP does not support Golang's default TLS cipher suites with RSA.
4+

data/kmip-certs/ca-ec.pem

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIBtjCCAVsCAj+0MAoGCCqGSM49BAMCMGUxCzAJBgNVBAYTAlVTMREwDwYDVQQI
3+
DAhOZXcgWW9yazEWMBQGA1UEBwwNTmV3IFlvcmsgQ2l0eTEQMA4GA1UECgwHTW9u
4+
Z29EQjEMMAoGA1UECwwDREJYMQswCQYDVQQDDAJjYTAgFw0yMjA4MTgwMDM5NTZa
5+
GA8yMDYyMDgwODAwMzk1NlowZTELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE5ldyBZ
6+
b3JrMRYwFAYDVQQHDA1OZXcgWW9yayBDaXR5MRAwDgYDVQQKDAdNb25nb0RCMQww
7+
CgYDVQQLDANEQlgxCzAJBgNVBAMMAmNhMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
8+
QgAE0YOWpm6I2mES1h6CKMw5j29lWDfk36/S7i2+Rw5e9JvGmDGSepDH03MJlm4l
9+
J9pou6NJrtAfIhMsxvh4oECodTAKBggqhkjOPQQDAgNJADBGAiEAyr7ByfWjA1aG
10+
hJD1zFtU2C/+i59vGY3oYQ3gX6Y7HrICIQDkO5JF9tXeDOL5IPkpjBAp6OjACE6Y
11+
Ns42/ywMFmyWhA==
12+
-----END CERTIFICATE-----

data/kmip-certs/client-ec.pem

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIB/jCCAaSgAwIBAgICYz4wCgYIKoZIzj0EAwIwZTELMAkGA1UEBhMCVVMxETAP
3+
BgNVBAgMCE5ldyBZb3JrMRYwFAYDVQQHDA1OZXcgWW9yayBDaXR5MRAwDgYDVQQK
4+
DAdNb25nb0RCMQwwCgYDVQQLDANEQlgxCzAJBgNVBAMMAmNhMCAXDTIyMDgxODAw
5+
Mzk1NloYDzIwNjIwODA4MDAzOTU2WjBpMQswCQYDVQQGEwJVUzERMA8GA1UECAwI
6+
TmV3IFlvcmsxFjAUBgNVBAcMDU5ldyBZb3JrIENpdHkxEDAOBgNVBAoMB01vbmdv
7+
REIxDDAKBgNVBAsMA0RCWDEPMA0GA1UEAwwGY2xpZW50MFkwEwYHKoZIzj0CAQYI
8+
KoZIzj0DAQcDQgAE3lcl3A0IqcmuNeNhk9u8KZKe/Du5/e2xd3B8MRqROb/MDTFY
9+
JkBatcCNhcSCIjgtFMjZ8Rv2WrrN0fvmEqYpm6M+MDwwCQYDVR0TBAIwADAaBgNV
10+
HREEEzARgglsb2NhbGhvc3SHBH8AAAEwEwYDVR0lBAwwCgYIKwYBBQUHAwIwCgYI
11+
KoZIzj0EAwIDSAAwRQIgbkV6V3MK2nZdjr7LV0PKqfxKCWRyxRACEOH61a6dctsC
12+
IQD6k65C8AXAPOL+cqaZjoEMBpRea4F8gL0jIwzHh+tkAA==
13+
-----END CERTIFICATE-----
14+
-----BEGIN EC PRIVATE KEY-----
15+
MHcCAQEEIOw4V3MEjv/5go8JQGr9Au1sa9yzLzPXVsiZ2OihwN7joAoGCCqGSM49
16+
AwEHoUQDQgAE3lcl3A0IqcmuNeNhk9u8KZKe/Du5/e2xd3B8MRqROb/MDTFYJkBa
17+
tcCNhcSCIjgtFMjZ8Rv2WrrN0fvmEqYpmw==
18+
-----END EC PRIVATE KEY-----

data/kmip-certs/server-ec.pem

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIB/TCCAaSgAwIBAgICNNIwCgYIKoZIzj0EAwIwZTELMAkGA1UEBhMCVVMxETAP
3+
BgNVBAgMCE5ldyBZb3JrMRYwFAYDVQQHDA1OZXcgWW9yayBDaXR5MRAwDgYDVQQK
4+
DAdNb25nb0RCMQwwCgYDVQQLDANEQlgxCzAJBgNVBAMMAmNhMCAXDTIyMDgxODAw
5+
Mzk1NloYDzIwNjIwODA4MDAzOTU2WjBpMQswCQYDVQQGEwJVUzERMA8GA1UECAwI
6+
TmV3IFlvcmsxFjAUBgNVBAcMDU5ldyBZb3JrIENpdHkxEDAOBgNVBAoMB01vbmdv
7+
REIxDDAKBgNVBAsMA0RCWDEPMA0GA1UEAwwGc2VydmVyMFkwEwYHKoZIzj0CAQYI
8+
KoZIzj0DAQcDQgAEgWFZeI/XzPl42qAMa8UZBLoW2IdkIowhz+iu9F5LkAXI388L
9+
qbRE4327RvquPO7Ca5eB9GNs77DEtnfMnVuXQ6M+MDwwCQYDVR0TBAIwADAaBgNV
10+
HREEEzARgglsb2NhbGhvc3SHBH8AAAEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCgYI
11+
KoZIzj0EAwIDRwAwRAIgHz7k59ubmnFHM+4GQpz0aeQ+FQGadRYe/h31iRye2wMC
12+
IAvirZCoxYBLlZ0NoXH8ncmEQzgkCx9hhv7mWpjNRk/h
13+
-----END CERTIFICATE-----
14+
-----BEGIN EC PRIVATE KEY-----
15+
MHcCAQEEIIRjzdANl/ghc/LgEdyGRc3xo07YHu1qku3GQNGY2OnboAoGCCqGSM49
16+
AwEHoUQDQgAEgWFZeI/XzPl42qAMa8UZBLoW2IdkIowhz+iu9F5LkAXI388LqbRE
17+
4327RvquPO7Ca5eB9GNs77DEtnfMnVuXQw==
18+
-----END EC PRIVATE KEY-----

etc/gen-ec-certs/client.ext

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
basicConstraints = CA: FALSE
2+
subjectAltName = DNS: localhost, IP: 127.0.0.1
3+
extendedKeyUsage = clientAuth

etc/gen-ec-certs/empty.cnf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# A nearly empty OpenSSL CA configuration file.
2+
# `openssl req` complains without a configuration file.
3+
[ req ]
4+
distinguished_name = distinguished_name
5+
6+
[ distinguished_name ]

etc/gen-ec-certs/gen-ec-certs.sh

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# This script is used to generate Elliptic Curve (EC) certificates.
2+
# The EC certificates are used for testing the Go driver with PyKMIP.
3+
# PyKMIP does not support Go's default TLS cipher suites with RSA.
4+
# See: GODRIVER-2239.
5+
set -euo pipefail
6+
CA_SERIAL=$RANDOM
7+
SERVER_SERIAL=$RANDOM
8+
CLIENT_SERIAL=$RANDOM
9+
DAYS=14600
10+
11+
# Generate CA certificate ... begin
12+
# Generate an EC private key.
13+
openssl ecparam -name prime256v1 -genkey -out ca-ec.key -noout
14+
# Generate a certificate signing request.
15+
openssl req -new -key ca-ec.key -out ca-ec.csr -subj "/C=US/ST=New York/L=New York City/O=MongoDB/OU=DBX/CN=ca/" -config empty.cnf -sha256
16+
# Self-sign the request.
17+
openssl x509 -in ca-ec.csr -out ca-ec.pem -req -signkey ca-ec.key -days $DAYS -sha256 -set_serial $CA_SERIAL
18+
# Generate CA certificate ... end
19+
20+
# Generate Server certificate ... begin
21+
# Generate an EC private key.
22+
openssl ecparam -name prime256v1 -genkey -out server-ec.key -noout
23+
# Generate a certificate signing request.
24+
openssl req -new -key server-ec.key -out server-ec.csr -subj "/C=US/ST=New York/L=New York City/O=MongoDB/OU=DBX/CN=server/" -config empty.cnf -sha256
25+
# Sign the request with the CA. Add server extensions.
26+
openssl x509 -in server-ec.csr -out server-ec.pem -req -CA ca-ec.pem -CAkey ca-ec.key -days $DAYS -sha256 -set_serial $SERVER_SERIAL -extfile server.ext
27+
# Append private key to .pem file.
28+
cat server-ec.key >> server-ec.pem
29+
# Generate Server certificate ... end
30+
31+
# Generate Client certificate ... begin
32+
# Generate an EC private key.
33+
openssl ecparam -name prime256v1 -genkey -out client-ec.key -noout
34+
# Generate a certificate signing request.
35+
# Use the Common Name (CN) of "client". PyKMIP identifies the client by the CN. The test server expects the identity of "client".
36+
openssl req -new -key client-ec.key -out client-ec.csr -subj "/C=US/ST=New York/L=New York City/O=MongoDB/OU=DBX/CN=client/" -config empty.cnf -sha256
37+
# Sign the request with the CA. Add client extensions.
38+
openssl x509 -in client-ec.csr -out client-ec.pem -req -CA ca-ec.pem -CAkey ca-ec.key -days $DAYS -sha256 -set_serial $CLIENT_SERIAL -extfile client.ext
39+
# Append private key to .pem file.
40+
cat client-ec.key >> client-ec.pem
41+
# Generate Client certificate ... end
42+
43+
# Clean-up.
44+
rm *.csr
45+
rm *.key

etc/gen-ec-certs/server.ext

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
basicConstraints = CA: FALSE
2+
subjectAltName = DNS: localhost, IP: 127.0.0.1
3+
extendedKeyUsage = serverAuth

0 commit comments

Comments
 (0)