openssl_pkey_new () Fehler auslösen - Richtiges openssl.cnf Setup für PHP

** Okay, es ist klar geworden, dass dieses Problem mit der Einrichtung von openssl auf dem Linux-Server und der ordnungsgemäßen Einrichtung einer benutzerdefinierten openssl.cnf-Datei zusammenhängt. Ich suche nichts Kompliziertes, aber ich benötige ein Front-End, um selbstsignierte Client-Zertifikate für die Authentifizierung bei meinem Webservice erstellen zu können. Daher muss ich in der Lage sein, mit meiner Zertifizierungsstelle Zwischenzertifizierungsstellen für Kundenunternehmen zu erstellen und ihnen dann eine sichere Schnittstelle zur Ausstellung von Clientzertifikaten für ihre Mitarbeiter zu ermöglichen. Die Anmeldungen basieren darauf, ob Sie einer bestimmten Zwischenzertifizierungsstelle angehören und ob Ihr Zertifikat oder die Zwischenzertifizierungsstelle nicht gesperrt wurde.

Für alle, die sich fragen, können wir selbstsignierte Zertifikate verwenden, da diese nur für unseren Server zur Authentifizierung von Benutzern verwendet werden und wir ihnen vertrauen, da wir sie ausgestellt haben. Auch wäre es für ein Startup viel zu teuer, sich über die kommerziellen Angebote der AFAIK als Intermediate CA zu etablieren. Microsoft kann das, wir können es nicht. Unser Webserver selbst verwendet ein CA-signiertes Zertifikat.

Ich weiß, dass PHP-Code für die Einrichtung dieser Art von Dingen einfach ist, aber was nicht ist, wie man openssl richtig einrichtet. Ich habe verschiedene Beispiele im Internet ausprobiert und keines davon scheint für mein Setup zu funktionieren und alle scheinen unterschiedlich zu sein. Eine Box war eine Neuinstallation von Centos 6.2 und ich erhalte immer noch Fehler.

Kann jemand mich in die richtige Richtung für die Einrichtung von OpenSSL, Apache2 und PHP zeigen, damit ich diese PHP-Bibliotheken ohne Fehler verwenden kann? Unser virtueller Server benutzt Debian Squeeze und ich habe die volle Kontrolle über die installierte Software.

Vielen Dank.

open_pkey_new () gibt Fehler zurück, z. B. Fehler: 0E06D06C: Konfigurationsdateiroutinen: NCONF_get_string: kein Wert. Ich übergebe jedoch einen Pfad zu einer openssl.cnf-Datei, damit ich nicht weiß, warum ich dieses Problem immer noch bekomme. Hier ist mein relevanter Code

<?php
$cwd=getcwd();
$distname= array(
    "countryName" => "CA",
    "stateOrProvinceName" => "Ontario",
    "localityName" => "Toronto",
    "organizationName" => "G4 Apps",
    "organizationalUnitName" => "Development",
    "commonName" => "Mark Lane",
    "emailAddress" => "nobody at gmail.com"
        );
$password = 'seanix';

$cacert_location=$cwd."/certs/CA/g4CA.crt";
$cakey_location=$cwd."/certs/CA/g4CA.key";
$cnf=$cwd.'/certs/myopenssl.cnf';
$configArgs = array(
        'config' =>$cnf
);
?>

Hier ist meine Funktion, die die Tasten macht.

<?php
function makekey($password,$configArgs) {
    $key= openssl_pkey_new($configArgs);
    //print_r($configArgs);
    openssl_pkey_export($key, $pkeyout,$password);
    if (($e=openssl_error_string()) ==false) return $pkeyout;
    else {
        do {

            echo $e . "<BR>";
        } while($e=openssl_error_string());
        return -1;
    }
}
?>

Ich habe versucht, relative Pfade zu der Konfigurationsdatei und es funktioniert immer noch nicht. Sieht so aus, als wäre es das SSL-Setup des Hostanbieters. Ich habe zu einer lokalen virtuellen Maschine gewechselt und habe den Schlüssel zum Generieren erhalten, aber jetzt erhalte ich den gleichen Fehler beim Erstellen eines csr.

Fehler: 0E06D06C: Konfigurationsdateiroutinen: NCONF_get_string: kein Wert

<?php
function newcsr($distname,$key,$configArgs) {
    $csr=openssl_csr_new($distname,$key,$configArgs);
    openssl_csr_export($csr, $csrout);
    if (($e=openssl_error_string()) ==false) return $csrout;
    else {
        do {

            echo $e . "<BR>";
        } while($e=openssl_error_string());
        return -1;
    }
}
?>

openssl.conf Dies scheint ein Fehler in openssl.cnf zu sein, also habe ich die Datei eingefügt.

HOME            = .
RANDFILE        = $ENV::HOME/.rnd

oid_section     = new_oids


[ new_oids ]


tsa_policy1 = 1.2.3.4.1
tsa_policy2 = 1.2.3.4.5.6
tsa_policy3 = 1.2.3.4.5.7

####################################################################
[ ca ]
default_ca  = g4CA      

####################################################################
[ g4CA ]

dir     = /home/g4apps/secure.g4apps.com/generator/certs    
certs       = $dir/     
crl_dir     = $dir/crl      
database    = $dir/index.txt    


new_certs_dir   = $dir/newcerts     

certificate = $dir/CA/g4CA.crt  
serial      = $dir/serial       
crlnumber   = $dir/crlnumber    

crl     = $dir/CA/g4CA.crl  
private_key = $dir/CA/g4CA.key  
RANDFILE    = $dir/private/.rand    

x509_extensions = usr_cert      

name_opt    = ca_default        
cert_opt    = ca_default        


default_days    = 365           # how long to certify for
default_crl_days= 30            # how long before next CRL
default_md  = default       # use public key default MD
preserve    = no            # keep passed DN ordering

policy      = policy_match


[ policy_match ]
countryName     = match
stateOrProvinceName = match
organizationName    = match
organizationalUnitName  = optional
commonName      = supplied
emailAddress        = optional

[ policy_anything ]
countryName     = optional
stateOrProvinceName = optional
localityName        = optional
organizationName    = optional
organizationalUnitName  = optional
commonName      = supplied
emailAddress        = optional

####################################################################
[ req ]
default_bits        = 2048
default_md      = md5
default_keyfile     = privkey.pem
distinguished_name  = req_distinguished_name
attributes      = req_attributes
x509_extensions = v3_ca # The extentions to add to the self signed cert

string_mask = utf8only

[ req_distinguished_name ]
countryName         = Country Name (2 letter code)
countryName_default     = CA
countryName_min         = 2
countryName_max         = 2

stateOrProvinceName     = State or Province Name (full name)
stateOrProvinceName_default = ON

localityName            = Locality Name (eg, city)
localityName_default    = Toronto

0.organizationName      = Organization Name (eg, company)
0.organizationName_default  = G4 Apps



organizationalUnitName      = Organizational Unit Name (eg, section)

commonName          = Common Name (eg, your name or your server\'s hostname)
commonName_max          = 64

emailAddress            = Email Address
emailAddress_default        = [email protected]
emailAddress_max        = 64


[ req_attributes ]
challengePassword       = A challenge password
challengePassword_min       = 4
challengePassword_max       = 20

unstructuredName        = An optional company name

[ usr_cert ]

nsComment           = "OpenSSL Generated Certificate"

subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer



[ v3_req ]


basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment

[ v3_ca ]


subjectKeyIdentifier=hash

authorityKeyIdentifier=keyid:always,issuer
basicConstraints = CA:true


[ crl_ext ]

authorityKeyIdentifier=keyid:always

[ proxy_cert_ext ]
basicConstraints=CA:FALSE

nsComment           = "OpenSSL Generated Certificate"

subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer

proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo

####################################################################
[ tsa ]

default_tsa = tsa_config1   

[ tsa_config1 ]

dir             = ./demoCA      
serial      = $dir/tsaserial    
crypto_device   = builtin       
signer_cert = $dir/tsacert.pem  

certs       = $dir/cacert.pem   
signer_key  = $dir/private/tsakey.pem 
default_policy  = tsa_policy1       
other_policies  = tsa_policy2, tsa_policy3
digests     = md5, sha1     
accuracy    = secs:1, millisecs:500, microsecs:100  
clock_precision_digits  = 0 
ordering        = yes   

tsa_name        = yes   
ess_cert_id_chain   = no    

Stack-Tracestrace php getkeystore.php &> stack.trace

http://secure.g4apps.com/generator/stack.trace

Antworten auf die Frage(5)

Ihre Antwort auf die Frage