openssl_pkey_new() renvoyer des erreurs — Bon openssl.cnf de configuration de php

**Bon, Il est devenu clair que cette question est une question en lien avec le programme d'installation de openssl sur le serveur Linux et comment bien le programme d'installation personnalisé openssl.cnf de fichier. Je ne suis pas à la recherche de quelque chose de compliqué, mais j'ai besoin d'un front-end pour être en mesure de créer une auto-signé client des certificats pour l'authentification de mon webservice. Donc j'ai besoin d'être en mesure d'utiliser mon CA pour créer des CAs intermédiaires pour les entreprises clientes et de leur permettre une interface sécurisée de délivrer des certificats clients pour leurs employés. Les connexions sont basées sur si vous appartenez à une autorité de certification intermédiaire et que votre certificat ou de l'autorité de certification intermédiaire n'a pas être révoquée.

Pour quiconque demandais, on peut utiliser des certificats auto-signés, car ils ne sont utilisés que pour notre serveur pour authentifier les utilisateurs et depuis que nous avons publié, nous leur faisons confiance. Aussi, il serait beaucoup trop cher pour un démarrage à s'établir comme une autorité de certification intermédiaire par le biais d'offres commerciales autant que je sache. Microsoft peut le faire, nous ne pouvons pas. Notre serveur utilise elle-même une autorité de certification certificat signé.

Je sais que le code php pour le réglage de ce genre de truc est simple, mais ce n'est pas la façon de bien l'installation d'openssl. J'ai essayé plusieurs exemples sur le net et aucun d'entre eux semblent fonctionner pour ma configuration, et ils semblent tous être différents. Une zone de a été de la nouvelle installation de Centos 6.2 et j'ai toujours des erreurs.

Quelqu'un peut me pointer dans la bonne direction pour la configuration d'openssl, apache 2 et php afin que je puisse utiliser ces bibliothèques php sans erreurs? Notre serveur virtuel utilise debian squeeze et j'ai le plein contrôle de logiciel installé.

Grâce.

open_pkey_new() est le retour d'erreurs comme erreur:0E06D06C:fichier de configuration de routines:NCONF_get_string:aucune valeur. Pourtant, je suis de passage d'un chemin d'accès à un openssl.cnf fichier donc je ne sais pas pourquoi je suis encore en train de ce problème. Voici mon pertinentes du 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
);
?>

Voici ma fonction qui rend les clés.

<?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;
    }
}
?>

J'ai essayé les chemins d'accès relatifs à la configfile et cela ne fonctionne toujours pas. Regarde comme il pourrait être l'hôte à des fournisseurs de la configuration de ssl. Je suis passé à un local de la machine virtuelle et j'ai eu la clé pour générer, mais maintenant, je reçois le même message d'erreur lors de la création d'un rse.

erreur:0E06D06C:fichier de configuration de routines:NCONF_get_string:aucune valeur

<?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 Ce qui semble être une erreur dans openssl.cnf donc, je ai inclus le fichier.

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        = lmlane@gmail.com
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    

Trace de la pile strace php getkeystore.php &> stack.trace

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

Le message d'erreur, il semble qu'il y ait un manquant ou incorrect dans openssl.cnf
Est, sans aucun doute, le message d'erreur complet? J'ai vu cela avec plus d'après "pas de valeur", qui indique l'ini groupe où l'erreur se produit. Avez-vous essayé de courir à partir de la ligne de commande en utilisant la même config, et --verbose pour voir si vous pouvez obtenir plus d'informations? Vous êtes positif, le chemin d'accès à la config est correcte, mais avez-vous vérifié les autorisations, assurez-vous qu'il peut être lu?
Il n'y a pas de --verbose drapeau dans ma version de openssl. J'ai essayé à partir de la ligne de commande et il semble fonctionner. Génération d'une clé qui fonctionne et utilise la même config. J'ai déjà résolu le chemin pour le fichier de configuration de sorte que la génération de clés serait de travailler donc c'est pas ça.
Mon erreur, c'est -verbose, je travaille à partir de la mémoire. openssl ca -verbose. Des erreurs ont généralement des informations supplémentaires. Comme 7491:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:358: unable to load CA private key. Si il fonctionne via la ligne de commande, et pas de PHP, je serais encore pencher vers PHP n'ayant pas les autorisations pour lire le fichier de configuration. Essayé la version de PHP sur la ligne de commande? En tant qu'utilisateur même où OpenSSL CL fonctionne? Peut-être strace pour s'assurer qu'il ouvre le fichier?
Se rapprocher. PHP n'a aucun problème pour lire le fichier de config mais selon strace les fonctions d'openssl essayez d'utiliser /usr/lib/ssl/openssl.cnf à la place. Donc, il ya quelque chose de mal avec mon openssl dans la configuration de php. Leigh si vous apporter une réponse, je peux d'attribution de la prime de 10 minutes.

OriginalL'auteur Codeguy007 | 2012-08-21