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
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
Vous devez vous connecter pour publier un commentaire.
J'ai essayé sur mon Mac et une nouvelle installation de CentOS 6.3, et j'obtiens la même erreur. Je reçois mon CentOS paquets de SIU. C'est bizarre parce que même si je reçois ce message, la clé est en fait généré.
Le code suivant:
Me donne le résultat suivant:
Je le soupçonne d'être un bug dans PHP. Une sorte de openssl configuration de PHP a été accroché sur. J'ai trouvé un rapport de bug à ce sujet sur php.net mais il "a commencé à travailler" pour l'utilisateur, de sorte que le bug a été fermé.
Comme alternative, vous pouvez consulter phpseclib, une bibliothèque purement écrite en PHP.
Ce n'est pas une erreur PHP, c'est une OpenSSL erreur qui est relié par l'intermédiaire d'un PHP fonction wrapper. Vous pouvez voir comment fluidifier le wrapper est dans PHPs openssl.c, et il appelle directement OpenSSL fonction (
val = ERR_get_error();
)J'ai renoncé à l'aide d'openssl donc, la suggestion d'utiliser phpseclib est la meilleure solution.
OriginalL'auteur Luke
Vérifier si votre openssl.cnf a
d'autre ajouter à la cnf fichier et essayez à nouveau si cela aide.
Une réponse est un commentaire qui suggère une résolution, ne convenez-vous pas? 🙂
Oui, mais ce spécule sur un possible solution; il n'est pas de fournir une orientation vers la résolution de la situation. 🙂
Ce n'est pas le problème. Le fichier de configuration a default_md = sha1 et je l'ai changé pour md5, mais il a obtenu les mêmes résultats.
Je ne pense pas que vous l'obtenir - ou peut-être vous n'avez pas lu ce que j'ai écrit dans mes commentaires - ce ne doit pas nécessairement être un problème de code, de sorte que vous NE peut pas dire "Votre code est faux; voici comment vous pouvez résoudre le problème Avez-vous cela maintenant? ou est-il encore difficile à comprendre?
OriginalL'auteur raidenace
Basé sur le bug @Luc mentionné, ma conclusion serait:
openssl_pkey_new() ne retourne pas une valeur et, par conséquent, est "FAUX".
var_dump() juste dit qu'elle renvoie une clé OpenSSL.
"De sorte qu'il fonctionne - "NCONF_get_string:aucune valeur" n'est qu'une sorte de préavis." - [email protected]
openssl_csr_new() (et peut-être plus) ont un comportement similaire.
OriginalL'auteur Timlukas B.
Lors de l'utilisation de openssl_csr_new assurez-vous que le premier paramètre $dn ne contient pas les touches avec des valeurs vides.
Par exemple, cet appel à
openssl_csr_new
déclencherait l'erreur0E06D06C:configuration file routines:NCONF_get_string:no value
OriginalL'auteur daiwai
Dans ma configuration (FreeBSD, libressl 2.8, php construit à partir de ports) dans la section [ req ] l'entrée "default_bits" a été commentée.
Par l'activation de cette entrée de configuration ce problème a été résolu.
OriginalL'auteur Jan