##### SUMMARY
Some of the providers for the openssl_certificate module attempt to load the contents of csr_path during their init() methods, 

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
crypto/openssl_certificate

##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```
config file = /opt/ansible-openssl-module/molecule_openssl_test/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /opt/python-environments/py36env/lib/python3.6/site-packages/ansible
  executable location = /opt/python-environments/py36env/bin/ansible
  python version = 3.6.7 (default, Dec  5 2018, 15:02:05) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

```

##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
```

```

##### OS / ENVIRONMENT
<!--- Provide all relevant information below, e.g. target OS versions, network device firmware, etc. -->
Not applicable, bug identified during code review.

##### STEPS TO REPRODUCE
<!--- Describe exactly how to reproduce the problem, using a minimal test-case -->

<!--- Paste example playbooks or commands between quotes below -->
```
- name: Generate self-signed certificate with cryptography, CSR is an invalid path
  openssl_certificate:
    path: /etc/ssl/crt/ansible.com.crt
    privatekey_path: /etc/ssl/private/ansible.com.pem
    csr_path: /etc/ssl/csr/ansible.com.INVALID.csr
    provider: selfsigned
- name: Generate self-signed certificate with pyopenssl, CSR is invalid path
    openssl_certificate:
    path: /etc/ssl/crt/ansible.com.crt
    privatekey_path: /etc/ssl/private/ansible.com.pem
    csr_path: /etc/ssl/csr/ansible.com.INVALID.csr
    provider: selfsigned
    select_crypto_backend: pyopenssl
- name: Generate OwnCA certificate with cryptography, CSR is invalid path
   openssl_certificate:
     path: /etc/ssl/crt/ansible.com.crt
     csr_path: /etc/ssl/csr/ansible.com.INVALID.csr
     ownca_path: /etc/ssl/crt/ansible_CA.crt
     ownca_privatekey_path: /etc/ssl/private/ansible_CA.pem
     provider: ownca
Name: Generate OwnCA certificate with pyopenssl, CSR is invalid path
   openssl_certificate:
     path: /etc/ssl/crt/ansible.com.crt
     csr_path: /etc/ssl/csr/ansible.com.INVALID.csr
     ownca_path: /etc/ssl/crt/ansible_CA.crt
     ownca_privatekey_path: /etc/ssl/private/ansible_CA.pem
     provider: ownca
     select_crypto_backend: pyopenssl
```
<!--- HINT: You can paste gist.github.com links for larger files -->

##### EXPECTED RESULTS
Should throw error:
raise CertificateError(
                'The certificate signing request file %s does not exist' % self.csr_path
            )

That error is currently in the generate method instead of init(), so it ends up attempting the certificate load via crypto_utils.load_certificate_request in init prior to the check for file path existence.

##### ACTUAL RESULTS
Will update ticket to populate once I have a chance to create test cases.

<!--- Paste verbatim command output between quotes -->
```

```

description:
    - This module allows one to (re)generate OpenSSL certificates.
    - It implements a notion of provider (ie. C(selfsigned), C(ownca), C(acme), C(assertonly), C(entrust))
      for your certificate.
    - The C(assertonly) provider is intended for use cases where one is only interested in
      checking properties of a supplied certificate. Please note that this provider has been
      deprecated in Ansible 2.9 and will be removed in Ansible 2.13. See the examples on how
      to emulate C(assertonly) usage with M(openssl_certificate_info), M(openssl_csr_info),
      M(openssl_privatekey_info) and M(assert). This also allows more flexible checks than
      the ones offered by the C(assertonly) provider.
    - The C(ownca) provider is intended for generate OpenSSL certificate signed with your own
      CA (Certificate Authority) certificate (self-signed certificate).
    - Many properties that can be specified in this module are for validation of an
      existing or newly generated certificate. The proper place to specify them, if you
      want to receive a certificate with these properties is a CSR (Certificate Signing Request).
    - "Please note that the module regenerates existing certificate if it doesn't match the module's
      options, or if it seems to be corrupt. If you are concerned that this could overwrite
      your existing certificate, consider using the I(backup) option."
    - It uses the pyOpenSSL or cryptography python library to interact with OpenSSL.
    - If both the cryptography and PyOpenSSL libraries are available (and meet the minimum version requirements)
      cryptography will be preferred as a backend over PyOpenSSL (unless the backend is forced with C(select_crypto_backend))
requirements:
    - PyOpenSSL >= 0.15 or cryptography >= 1.6 (if using C(selfsigned) or C(assertonly) provider)
    - acme-tiny (if using the C(acme) provider)
author:
  - Yanis Guenane (@Spredzy)
  - Markus Teufelberger (@MarkusTeufelberger)
options:
    state:
        description: