Skip to main content

Create openvpn certificate remotely

VPN (Virtual Private Network) is using in my management system. As a requirement, the administrator can create the certificate (crt file) for VPN client remotely, the information as well as the files of these certificates should be stored in database so that the admin can download them from web UI.
I installed the open source OpenVPN, this tool is simple but robust enough to provide the access from the server VPN to client VPN. However, the disadvantage is that you can only use terminal to generate the crt file :(.
Here are some solutions but I suppose none of them is acceptable.
The first solution is to using ssh to remote access the VPN server then manually create the crt files. Also, create a service to scan the keys folder of VPN to update these files into database. This solution is the easiest way to do but there is no provision of user friendly.
The second solution is to write an bash script file which contains all the manual command to yield the certificate. However, how to trigger this file? From web UI or ssh? If ssh, this solution is not much better than the previous one. If web UI, then nice! but the barrier is that openvpn auto use the openssl of the xampp server instead of itself openssl, which incorrectly generates the crt file and of course, client cannot use these files. It is very helpful if there is a way to tell openvpn to use itself openssl version :)

I am still researching to find out a way. :))

Updated
Finally, I found a way to generate certificate remotely. Below is my method in details.
I write service in java that run background and scan the database every 2s to see if there is any request to generate OpenVPN key file. If any, this service will call the .sh file which contain all commands to generate the certificate.
Notice, this jar file must be located at the folder of OpenVPN: /etc/openvpn/easy-rsa/
Done!

Comments

Popular posts from this blog

PHP json_encode return empty array [] instead of empty object {}

Problem: Get below array for example.  $status = array ( "message" => "error" , "club_id" => $_club_id , "status" => "1" , "membership_info" => array (), ); This array will be encoded in json format echo json_encode($status); This function return json: {"message":"error","club_id":275,"status":"1","membership_info": [] } Notice the empty array [], it is not consistent, it should be an empty object {} {"message":"error","club_id":275,"status":"1","membership_info": {} } The cause: This problem is caused by the called function array(), which yields an empty array [] Solution: There are 2 solutions for this issue: Solution 1: Call new stdClass instead of array(), stdClass generates an empty object {} Solution 2: The above solution is complex in case there are plenty of arr...

HTTP_REFERER

A friend of mine ask me if a server can know where we come from before we go to that server (referal link). YES. This information is the field "HTTP_REFERRER" in $_SERVER of the coming request. Here is an example: http://113.161.96.198/referal/ For the reason of SEO, some guys do not want any server know about this referal link that points to their own server. Here are some solutions: HTML5: Add norefer attribute   No REFERRER PHP redirect: <?php header( 'Location: http://113.161.96.198/referal/ ' ) ; ?> .... lot of solutions lol

Sub-program (procedure and function) in SQL

What is sub-program in SQL? Sub-program is a programming unit which is created in a database to perform some tasks on data. Basic usages of sub-program? Create CREATE PROCEDURE or CREATE FUNCTION Delete DROP PROCEDURE or DROP FUNCTION Two kinds of sub-program: PROCEDURE: perform an action but NOT return a value, but we can get output value by OUT variables. and FUNCTION: compute and return a value Create procedure: CREATE [ OR REPLACE ] PROCEDURE procedure_name [( parameter_name [ IN | OUT | IN OUT ] type [, ...])] { IS | AS } BEGIN < procedure_body > END procedure_name ; Create function: CREATE [ OR REPLACE ] FUNCTION function_name [( parameter_name [ IN | OUT | IN OUT ] type [, ...])] RETURN return_datatype { IS | AS } BEGIN < function_body > END [ function_name ]; What is cursor? A cursor holds the rows (one or more) returned by a SQL statement. Triggers are stored programs, which are automatically executed or fired wh...