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