diff --git a/xos/configurations/common/Dockerfile.common b/xos/configurations/common/Dockerfile.common
index 11f51fc..3653632 100644
--- a/xos/configurations/common/Dockerfile.common
+++ b/xos/configurations/common/Dockerfile.common
@@ -131,6 +131,16 @@
 RUN pip install python-dateutil
 RUN bash /opt/xos/tosca/install_tosca.sh
 
+# for OpenVPN
+RUN mkdir -p /opt/openvpn
+RUN git clone https://github.com/OpenVPN/easy-rsa.git /opt/openvpn
+RUN git -C /opt/openvpn pull origin master
+RUN cp /opt/xos/services/vpn/vars /opt/openvpn/vars
+RUN source /opt/openvpn/vars
+RUN /opt/openvpn/clean-all
+RUN /opt/openvpn/build-ca --batch
+RUN /opt/openvpn/build-key-server --batch server
+
 EXPOSE 8000
 
 # Set environment variables.
diff --git a/xos/services/vpn/admin.py b/xos/services/vpn/admin.py
index 609afa4..53ec31d 100644
--- a/xos/services/vpn/admin.py
+++ b/xos/services/vpn/admin.py
@@ -1,5 +1,4 @@
 import time
-from subprocess import PIPE, Popen
 
 from core.admin import ReadOnlyAwareAdmin, SliceInline
 from core.middleware import get_request
@@ -7,7 +6,6 @@
 from django import forms
 from django.contrib import admin
 from services.vpn.models import VPN_KIND, VPNService, VPNTenant
-from xos.exceptions import XOSProgrammingError
 
 
 class VPNServiceAdmin(ReadOnlyAwareAdmin):
@@ -39,33 +37,9 @@
                            'top',
                            'administration'),)
 
-    form = VPNServiceForm
-
     def queryset(self, request):
         return VPNService.get_service_objects_by_user(request.user)
 
-class VPNServiceForm(forms.ModelForm):
-    """The form used to create and edit a VPNService."""
-
-
-    def __init__(self, *args, **kwargs):
-        super(VPNServiceForm, self).__init__(*args, **kwargs)
-
-    def save(self, commit=True):
-        if (not self.instance.ca):
-            self.instance.ca = self.generate_ca
-
-        return super(VPNServiceForm, self).save(commit=commit)
-
-    def generate_ca(self):
-        """str: Generates a CA certificate."""
-        proc = Popen("./ca.sh", shell=True, stdout=PIPE)
-        (stdout, stderr) = proc.communicate()
-        return stdout
-
-    class Meta:
-        model = VPNService
-
 
 class VPNTenantForm(forms.ModelForm):
     """The form used to create and edit a VPNTenant.
@@ -87,7 +61,6 @@
     is_persistent = forms.BooleanField(required=False)
     can_view_subnet = forms.BooleanField(required=False)
 
-
     def __init__(self, *args, **kwargs):
         super(VPNTenantForm, self).__init__(*args, **kwargs)
         self.fields['kind'].widget.attrs['readonly'] = True
@@ -128,22 +101,25 @@
         if (not self.instance.script):
             self.instance.script = str(time.time()) + ".vpn"
 
-        if (not self.instance.server_key):
-            self.instance.server_key = self.generate_VPN_key()
+        if (not self.instance.ca_cert):
+            self.generate_ca_crt()
 
-        if (self.instance.provider_service):
-            self.instance.ca = self.instance.provider_service.ca
-        else:
-            raise XOSProgrammingError("VPN Tenant does not have provider service)
+        if ((not self.instance.server_cert) or (not self.instance.server_key)):
+            self.generate_server_credentials()
 
         return super(VPNTenantForm, self).save(commit=commit)
 
-    def generate_VPN_key(self):
-        """str: Generates a VPN key using the openvpn command."""
-        proc = Popen("openvpn --genkey --secret /dev/stdout",
-                     shell=True, stdout=PIPE)
-        (stdout, stderr) = proc.communicate()
-        return stdout
+    def generate_ca_crt(self):
+        """str: Generates the ca cert by reading from the ca file"""
+        with open("/opt/openvpn/keys/ca.crt") as crt:
+            return crt.readlines()
+
+    def generate_server_credentials(self):
+        with open("/opt/openvpn/keys/server.crt") as crt:
+            self.instance.server_crt = crt.readlines()
+
+        with open("/opt/openvpn/keys/server.key") as key:
+            self.instance.server_key = key.readlines()
 
     class Meta:
         model = VPNTenant
diff --git a/xos/services/vpn/ca.sh b/xos/services/vpn/ca.sh
deleted file mode 100644
index fc94613..0000000
--- a/xos/services/vpn/ca.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-rm -f /usr/share/easy-rsa/vars
-cp -r /usr/share/easy-rsa/* .
-source vars
-sh clean-all
-sh build-ca --batch
-cat keys/ca.crt
diff --git a/xos/services/vpn/models.py b/xos/services/vpn/models.py
index 0876dcb..5a5919d 100644
--- a/xos/services/vpn/models.py
+++ b/xos/services/vpn/models.py
@@ -14,15 +14,6 @@
         app_label = "vpn"
         verbose_name = "VPN Service"
 
-    @property
-    def ca(self):
-        """str: the string for the ca certificate"""
-        return self.get_attribute("ca", None)
-
-    @ca.setter
-    def ca(self, value):
-        self.set_attribute("ca", value)
-
 
 class VPNTenant(TenantWithContainer):
     """Defines the Tenant for creating VPN servers."""
@@ -41,7 +32,9 @@
                           'can_view_subnet': False,
                           'is_persistent': True,
                           'script': None,
-                          'ca': None}
+                          'ca_crt': None,
+                          'server_crt': None,
+                          'server_key': None}
 
     def __init__(self, *args, **kwargs):
         vpn_services = VPNService.get_service_objects().all()
@@ -156,13 +149,31 @@
         self.set_attribute("script", value)
 
     @property
-    def ca(self):
+    def ca_crt(self):
         """str: the string for the ca certificate"""
-        return self.get_attribute("ca", self.default_attributes['ca'])
+        return self.get_attribute("ca_crt", self.default_attributes['ca_crt'])
 
-    @ca.setter
-    def ca(self, value):
-        self.set_attribute("ca", value)
+    @ca_crt.setter
+    def ca_crt(self, value):
+        self.set_attribute("ca_crt", value)
+
+    @property
+    def server_crt(self):
+        """str: the string for the server certificate"""
+        return self.get_attribute("server_crt", self.default_attributes['server_crt'])
+
+    @server_crt.setter
+    def server_crt(self, value):
+        self.set_attribute("server_crt", value)
+
+    @property
+    def server_key(self):
+        """str: the string for the server certificate"""
+        return self.get_attribute("server_key", self.default_attributes['server_key'])
+
+    @server_key.setter
+    def server_key(self, value):
+        self.set_attribute("server_key", value)
 
 
 def model_policy_vpn_tenant(pk):
diff --git a/xos/services/vpn/vars b/xos/services/vpn/vars
index 2cdc9b2..baec6e5 100644
--- a/xos/services/vpn/vars
+++ b/xos/services/vpn/vars
@@ -1,4 +1,4 @@
-export EASY_RSA="`pwd`"
+export EASY_RSA="/opt/openvpn"
 
 export OPENSSL="openssl"
 export PKCS11TOOL="pkcs11-tool"
@@ -6,7 +6,7 @@
 
 export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
 
-export KEY_DIR="/users/root/"
+export KEY_DIR="$EASY_RSA/keys"
 
 # PKCS11 fixes
 export PKCS11_MODULE_PATH="dummy"
