Better error checking on private key and csr.  Also, pull in file names ...

...instead of pointers.
I personally think that those error messages are perfectly legible, user friendly and descriptive (maybe apart from the error number in square brackets, but it provides very valuable information in case on want to debug what went wrong). 

Try this:

```
try:
    ...
except IOError as e:
    raise IOError(e.strerror)
```

From `e` you can retrieve all information that you need.