Fix import certificate private key encoding (#434)

When importing a certificate, the private key is passed to the
import/upload process from the UI as a str object. In Python3 this
raises two issues when processing the private key - the private key
validation fails and database insert of the certificate fails.

The fix in both cases is to correctly encode the private key as a bytes
object.
This commit is contained in:
Charles Hendrie
2016-10-08 19:04:54 -05:00
committed by kevgliss
parent 6cac2838e3
commit 3ad7a37f95
4 changed files with 47 additions and 2 deletions

View File

@ -364,6 +364,13 @@ def test_upload(logged_in_user):
assert 'ACustomName' in cert.name
# verify upload with a private key as a str
def test_upload_private_key_str(logged_in_user):
from lemur.certificates.service import upload
cert = upload(body=INTERNAL_VALID_LONG_STR, chain=INTERNAL_VALID_SAN_STR, private_key=PRIVATE_KEY_STR.decode('utf-8'), owner='joe@example.com', name='ACustomName')
assert cert
@pytest.mark.parametrize("token,status", [
(VALID_USER_HEADER_TOKEN, 200),
(VALID_ADMIN_HEADER_TOKEN, 200),

View File

@ -0,0 +1,29 @@
from marshmallow.exceptions import ValidationError
from .vectors import PRIVATE_KEY_STR
def test_private_key():
from lemur.common.validators import private_key
try:
private_key(PRIVATE_KEY_STR)
assert True
except ValidationError:
assert False, "failed to validate private key as a bytes object"
def test_private_key_str_object():
from lemur.common.validators import private_key
try:
private_key(PRIVATE_KEY_STR.decode('utf-8'))
assert True
except ValidationError:
assert False, "failed to validate private key as a str object"
def test_private_key_invalid():
from lemur.common.validators import private_key
try:
private_key('invalid_private_key')
assert False, "invalid private key should have raised an exception"
except ValidationError:
assert True