On 20.11.2019 10:26, Tillman Peng wrote:
hello

My client post the data body which is encrypted with public-key.
the private key is deployed in web server,powered by mp2.
How can I correctly decrypt the data with private key from within modperl 
handler?


Hi.
Do you have a separate command-line program on the server which can decrypt 
that content ?
If yes : if you do not find an appropriate perl module to do this decryption, your mod_perl handler can always execute that external program using the system() function.
(See : https://perldoc.perl.org/5.30.0/functions/system.html)

General idea :
- get the encrypted content from the request
- write this encrypted content to a file in some appropriate work directory on 
the server
- compose the external command that reads the encrypted data, and writes the decrypted content to a file
- execute that command with system()
- check for errors
- read the decrypted results file
- clean up

If you end up using this method, and you are doing this from within an Apache/mod_perl handler, you have to be extra careful about many aspects, such as : - catching any errors which may happen in the external program, and interpret them correctly in the calling module.
- logging the errors properly, so that if "it doesn't work", you can find out 
why
- taking into account that your webserver may receive several simultaneous requests for such content, and thus that there may be several instances of that external command running at the same time (think about the temporary files that you may need, and make sure that each instance uses its own unique files)
- cleaning up after succesfully running the command
- maybe selectively "not cleaning up" if there were any problems, so that you can inspect what happened - check permissions (the external program will run under the same user-id as the webserver, so whatever it writes, must be in a directory writeable by the webserver) - verify that the external command cannot be running for too long, causing the client to time-out waiting for a response, and closing the connection to the webserver - make extra sure that the client cannot, through some malicious use of the parameters that it sends to the server (e.g. filenames), result in damage on your server
(e.g. system("program > /etc/passwd"))
- etc.

If you prefer to use a perl module to do the decryption, you will have to look at what is available on CPAN. Most modules that relate to encryption/decryption are in the "Crypt" namespace, such as : https://metacpan.org/search?q=crypt%3A%3A



Reply via email to