protected String generateService(Service service, Stack stack) throws Exception {
@SuppressWarnings("unchecked")
Map<String, Object> metadata = DataAccessor.fields(service).withKey(ServiceConstants.FIELD_METADATA)
.withDefault(Collections.EMPTY_MAP).as(Map.class);
String serviceName = service.getName();
List<? extends String> configuredSans = DataAccessor.fromMap(metadata).withKey("sans")
.withDefault(Collections.emptyList()).asList(jsonMapper, String.class);
List<String> sans = new ArrayList<>(configuredSans);
sans.add(serviceName.toLowerCase());
sans.add(String.format("%s.%s", serviceName, stack.getName()).toLowerCase());
sans.add(String.format("%s.%s.%s", serviceName, stack.getName(), NetworkConstants.INTERNAL_DNS_SEARCH_DOMAIN)
.toLowerCase());
CertSet certSet = keyProvider.generateCertificate(serviceName, sans.toArray(new String[sans.size()]));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
certSet.writeZip(baos);
return Base64.encodeBase64String(baos.toByteArray());
}