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

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

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

SQL query optimization

SELECT query {EXPLAIN | DESCRIBE | DESC}  We usually use this command to check to see if how many rows the query goes through. Especially for the INDEX column checking. Search LIKE '%key%' consumes more resource than LIKE 'key%' Denormalisation This database design helps to speed up the data reading. Because the SQL query no need to join data between tables.