def generate_csr(private_key_bytes, subject_name, fqdn_list):
    """Generate a Certificate Signing Request (CSR).

    Args:
        private_key_bytes: bytes
            Private key with which the CSR will be signed.

        subject_name: str
            Certificate Subject Name

        fqdn_list:
            List of Fully Qualified Domain Names (FQDN) and/or IP addresses for which
            this certificate will provide authentication.

            E.g.: ['my.membernode.org', '1.2.3.4']
    """
    return (
        cryptography.x509.CertificateSigningRequestBuilder()
        .subject_name(subject_name)
        .add_extension(
            extension=cryptography.x509.SubjectAlternativeName(
                [cryptography.x509.DNSName(v) for v in fqdn_list]
            ),
            critical=False,
        )
        .sign(
            private_key=private_key_bytes,
            algorithm=cryptography.hazmat.primitives.hashes.SHA256(),
            backend=cryptography.hazmat.backends.default_backend(),
        )
    )