• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

OpenVPN

Dessp

Mitglied
Ohai,

ich schreibe an einer kleinen Webapplication zur verwaltung eines OpenVPN. Hierbei soll sich $Nutzer einloggen und in einem Frontend die möglichkeit haben sich OpenVPN Zertifikate zu erzeugen und Zertifikate zu wiederrufen. Dafür suche ich entweder eine PHP-Classe die diese erstellt oder einen alternativen Script den ich in PHP aufrufe.

Am $besten wäre es wenn ich eine Classe habe wo ich nur noch mit $openVPN->create($username); ein zertifikat erzeuge und diese danach dem Nutzer zum Download bereitstelle.

Viele Grüße
 
Werbung:
Und wo ist da jetzt genau dein Problem?

Willst du Hilfe bei der Erstellung einer solchen Klasse?
Wenn ja:
1. Wie weit bist du selber schon mit deinen Bemühungen eine zu erstellen gekommen?
2. Wo genau kommst du nicht weiter? (entsprechenden Code mitliefern und detailierte Beschreibung deines Problems)

Wenn nein:
Dann ist dein Posting im Job-Forum besser aufgehoben!
 
Werbung:
Hallo,

ich habe jetzt mit dem OpenSSL eine kleine classe geschrieben.

Code:
class zertifikat
{
	public function createPrivateKey()
	{
		$key = openssl_pkey_new();
		return $key;
	}
	public function createCRS($pK, $name, $commonName, $mail)
	{
		$dn = array(
    		"countryName" => "DE",
    		"stateOrProvinceName" => "Berlin",
   		 	"localityName" => "Berlin",
    		"organizationName" => "AFSN",
    		"organizationalUnitName" => $name,
    		"commonName" => $commonName,
    		"emailAddress" => $mail
		);
		$csr = openssl_csr_new($dn, $privkey);
		return $csr;
	}

	public function createCRT($crs, $ca, $privateKey, $privateKeyPW, $days)
	{
		$cacert = $ca;
		//$privkey = array($privateKey, $privateKeyPW);
		//$usercert = openssl_csr_sign($crs, $cacert, $privkey, 365);
		$usercert = openssl_csr_sign($crs, "file://".$ca, "file://".$privateKey, 1, array("config"=>"ca/openssl.cnf"));
		while (($e = openssl_error_string()) !== false) {
		    echo $e . "\n";
		}
		return $usercert;
	}
	public function createFile($privateKey, $cert)
	{
		openssl_x509_export_to_file($cert, "test.crt");
	}
}

Die funktion createCRT gibt auch fehler aus:

Code:
error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value
error:0E06D06C:configuration file routines:NCONF_get_string:no value

Nur habe ich das problem das wenn ich mich mit dem VPN verbinden möchte bekomme ich die Meldung:

Code:
Thu May 31 12:11:54 2012 Cannot load private key file test.key: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch
Thu May 31 12:11:54 2012 Error: private key password verification failed
Thu May 31 12:11:54 2012 Exiting

und der "Modulus:" des Public-Keys ist nicht identisch (Was ja das problem ist). Nur habe ich keine möglichkeit gefunden, einen public-key zu übergeben oder dafür zu sorgen das es gleich ist.
 
Es lag nicht an den Fehlern (die kommen immer noch) aber ich habe nochmal einen einfachn Script aus den kommentaren von php.net genommen und die Classe damit "neu" gemacht.
Ich habe keine Ahnung was falsch war aber jetzt geht es :p

Die Classe sieht jetzt so aus:

Code:
<?php
class vpn
{
}
class zertifikat
{
	public function createPrivateKey()
	{
		$key = openssl_pkey_new();
		return $key;
	}
	public function createCRS($pK, $name, $commonName, $mail)
	{
		$dn = array(
            "countryName"            => "DE",
            "stateOrProvinceName"    => "Berlin",
            "organizationName"       => "AFSN",
            "organizationalUnitName" => "AccountName",
            "commonName"             => "AccountName0001"
         );
		$csr = openssl_csr_new($dn, $pK);
		return $csr;
	}

	public function createCRT($crs, $ca, $privateKey, $privateKeyPW, $days)
	{
		$cacert = $ca;
		$usercert = openssl_csr_sign($crs, "file://$ca", "file://$privateKey", 2);
		return $usercert;
	}
	public function createFile($privateKey, $cert)
	{
		openssl_x509_export_to_file($cert, "test.crt");
		openssl_pkey_export_to_file($privateKey, "test.key");
	}
}
?>

und der Aufruf:
Code:
<?php
ini_set('display_errors', 1);
include("vpn.class.php");
$z = new zertifikat();
$pK = $z->createPrivateKey();
$crs = $z->createCRS($pK, "Name", "roll", "roll");
$crt = $z->createCRT($crs, "ca/ca.crt", "ca/ca.key", "", 10);
$z->createFile($pK, $crt);
?>

die Verbindung klappt danach mit dem VPN \o/
 
Werbung:
Zurück
Oben