openssl_csr_sign
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
Sign a CSR with another certificate (or itself) and generate a certificate
Description
openssl_csr_sign() generates an x509 certificate from the given CSR.
Cnf
Parameters
csrA CSR previously generated by
openssl_csr_new(). It can also be the path to a PEM encoded CSR when specified asfile://path/to/csror an exported string generated byopenssl_csr_export().ca_certificateThe generated certificate will be signed by
ca_certificate. Ifca_certificateis null, the generated certificate will be a self-signed certificate.private_keyprivate_keyis the private key that corresponds toca_certificate.daysdaysspecifies the length of time for which the generated certificate will be valid, in days.optionsYou can finetune the CSR signing by
options. Seeopenssl_csr_new()for more information aboutoptions.serialAn optional the serial number of issued certificate. If not specified it will default to 0.
serial_hexAn optional hexadecimal string representing the serial number of the issued certificate. If set, it takes precedence over the
serialparameter value. If not specified or set to null, theserialparameter value is used instead.
Return Values
Returns an OpenSSLCertificate on success, false on failure.
Changelog
| Version | Description |
|---|---|
| 8.4.0 | The serial_hex parameter is added. |
| 8.0.0 | On success, this function returns an OpenSSLCertificate instance now; previously, a Resource of type OpenSSL X.509 was returned. |
| 8.0.0 | csr accepts an OpenSSLCertificateSigningRequest instance now; previously, a Resource of type OpenSSL X.509 CSR was accepted. |
| 8.0.0 | ca_certificate accepts an OpenSSLCertificate instance now; previously, a Resource of type OpenSSL X.509 was accepted. |
| 8.0.0 | private_key accepts an OpenSSLAsymmetricKey or OpenSSLCertificate instance now; previously, a Resource of type OpenSSL key or OpenSSL X.509 was accepted. |
Examples
openssl_csr_sign() example - signing a CSR (how to implement your own CA)
<?php
// Let's assume that this script is set to receive a CSR that has
// been pasted into a textarea from another page
$csrdata = $_POST["CSR"];
// We will sign the request using our own "certificate authority"
// certificate. You can use any certificate to sign another, but
// the process is worthless unless the signing certificate is trusted
// by the software/users that will deal with the newly signed certificate
// We need our CA cert and its private key
$cacert = "file://path/to/ca.crt";
$privkey = array("file://path/to/ca.key", "your_ca_key_passphrase");
$usercert = openssl_csr_sign($csrdata, $cacert, $privkey, 365, array('digest_alg'=>'sha256') );
// Now display the generated certificate so that the user can
// copy and paste it into their local configuration (such as a file
// to hold the certificate for their SSL server)
openssl_x509_export($usercert, $certout);
echo $certout;
// Show any errors that occurred here
while (($e = openssl_error_string()) !== false) {
echo $e . "\n";
}
?>