Skip to content

Commit fdd0d48

Browse files
committed
Service generated CSR enhancement for VaaS
Added support for VaaS policy attributes 'csrUploadAllowed' and 'keyGeneratedByVenafiAllowed'
1 parent 4404e7f commit fdd0d48

4 files changed

Lines changed: 58 additions & 2 deletions

File tree

tests/test_pm.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,11 +164,43 @@ def test_validate_domains(self):
164164
policy = self._create_policy_cloud(policy=_get_policy_obj())
165165
self.assertListEqual(policy.policy.domains, POLICY_DOMAINS)
166166

167+
def test_csr_attributes_service(self):
168+
cit = self._create_csr_attributes_policy(service_generated_csr=True)
169+
170+
self.assertFalse(cit.csr_upload_allowed, "csrUploadAllowed attribute is not False")
171+
self.assertTrue(cit.key_generated_by_venafi_allowed, "keyGeneratedByVenafiAllowed is not True")
172+
173+
def test_csr_attributes_local(self):
174+
cit = self._create_csr_attributes_policy(service_generated_csr=False)
175+
176+
self.assertTrue(cit.csr_upload_allowed, "csrUploadAllowed attribute is not True")
177+
self.assertFalse(cit.key_generated_by_venafi_allowed, "keyGeneratedByVenafiAllowed is not False")
178+
179+
def test_csr_attributes_not_specified(self):
180+
cit = self._create_csr_attributes_policy()
181+
182+
self.assertTrue(cit.csr_upload_allowed, "csrUploadAllowed attribute is not True")
183+
self.assertTrue(cit.key_generated_by_venafi_allowed, "keyGeneratedByVenafiAllowed is not True")
184+
167185
def _create_policy_cloud(self, policy_spec=None, policy=None, defaults=None):
168186
zone = self._get_random_zone()
169187
response = create_policy(self.cloud_conn, zone, policy_spec, policy, defaults)
170188
return response
171189

190+
def _create_csr_attributes_policy(self, service_generated_csr=None):
191+
"""
192+
193+
:param bool service_generated_csr:
194+
:rtype: common.Policy
195+
"""
196+
policy = _get_policy_obj()
197+
policy.key_pair.service_generated = service_generated_csr
198+
zone = self._get_random_zone()
199+
create_policy(connector=self.cloud_conn, zone=zone, policy_spec=None, policy=policy)
200+
cit = self.cloud_conn._get_template_by_id(zone)
201+
202+
return cit
203+
172204
@staticmethod
173205
def _get_random_zone():
174206
return _get_zone()

vcert/common.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,8 @@ def __init__(self, policy_id=None, company_id=None, name=None, system_generated=
179179
subject_ou_regexes=None, subject_st_regexes=None, subject_l_regexes=None, subject_c_regexes=None,
180180
san_regexes=None, key_types=None, key_reuse=None, cert_authority=None, cert_authority_account_id=None,
181181
cert_authority_product_option_id=None, priority=None, modification_date=None, status=None, reason=None,
182-
validity_period=None, recommended_settings=None):
182+
validity_period=None, recommended_settings=None, csr_upload_allowed=None,
183+
key_generated_by_venafi_allowed=None):
183184
"""
184185
:param str policy_id:
185186
:param str company_id:
@@ -204,6 +205,8 @@ def __init__(self, policy_id=None, company_id=None, name=None, system_generated=
204205
:param str reason:
205206
:param str validity_period:
206207
:param vaas_utils.RecommendedSettings recommended_settings:
208+
:param bool csr_upload_allowed:
209+
:param bool key_generated_by_venafi_allowed:
207210
"""
208211
self.id = policy_id
209212
self.company_id = company_id
@@ -229,6 +232,8 @@ def __init__(self, policy_id=None, company_id=None, name=None, system_generated=
229232
self.reason = reason
230233
self.validity_period = validity_period
231234
self.recommended_settings = recommended_settings
235+
self.csr_upload_allowed = csr_upload_allowed
236+
self.key_generated_by_venafi_allowed = key_generated_by_venafi_allowed
232237

233238
def __repr__(self):
234239
return "Policy:\n" + "\n".join([f" {k}: {v}" for k, v in (

vcert/connection_cloud.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,9 @@ def _parse_policy_response_to_object(d):
247247
d['status'] if 'status' in d else None,
248248
d['reason'] if 'reason' in d else None,
249249
d['validityPeriod'] if 'validityPeriod' in d else None,
250-
None
250+
None,
251+
d['csrUploadAllowed'] if 'csrUploadAllowed' in d else None,
252+
d['keyGeneratedByVenafiAllowed'] if 'keyGeneratedByVenafiAllowed' in d else None
251253
)
252254
for kt in d.get('keyTypes', []):
253255
key_type = kt['keyType'].lower()

vcert/policy/pm_cloud.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,15 @@ def build_policy_spec(cit, ca_info, subject_cn_to_str=True):
103103
kp.rsa_key_sizes = key_sizes
104104

105105
kp.reuse_allowed = cit.key_reuse
106+
if cit.key_generated_by_venafi_allowed is True and cit.csr_upload_allowed is True:
107+
kp.service_generated = None
108+
elif cit.key_generated_by_venafi_allowed:
109+
kp.service_generated = True
110+
create_kp = True
111+
elif cit.csr_upload_allowed:
112+
kp.service_generated = False
113+
create_kp = True
114+
106115
p.key_pair = kp if create_kp else None
107116

108117
sans = SubjectAltNames(False, False, False, False, False)
@@ -412,6 +421,14 @@ def build_cit_request(ps, ca_details):
412421
else:
413422
request['keyReuse'] = False
414423

424+
if ps.policy and ps.policy.key_pair and ps.policy.key_pair.service_generated is not None:
425+
is_serv_gen = ps.policy.key_pair.service_generated
426+
request['csrUploadAllowed'] = not is_serv_gen
427+
request['keyGeneratedByVenafiAllowed'] = is_serv_gen
428+
else:
429+
request['csrUploadAllowed'] = True
430+
request['keyGeneratedByVenafiAllowed'] = True
431+
415432
r_settings = dict()
416433
if ps.defaults and ps.defaults.subject:
417434
if ps.defaults.subject.org:

0 commit comments

Comments
 (0)