PHPackages                             phprivoxy/x509 - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Security](/categories/security)
4. /
5. phprivoxy/x509

ActiveLibrary[Security](/categories/security)

phprivoxy/x509
==============

Easy X.509 self-signed certificate creation (without OpenSSL).

v0.8.2(2y ago)0391MITPHPPHP &gt;=8.1

Since Jun 19Pushed 2y ago1 watchersCompare

[ Source](https://github.com/phprivoxy/x509)[ Packagist](https://packagist.org/packages/phprivoxy/x509)[ Docs](https://www.phprivoxy.ru)[ RSS](/packages/phprivoxy-x509/feed)WikiDiscussions main Synced today

READMEChangelog (8)DependenciesVersions (10)Used By (1)

phprivoxy/x509
==============

[](#phprivoxyx509)

Simple library for self-signed X509 certificate generation.
-----------------------------------------------------------

[](#simple-library-for-self-signed-x509-certificate-generation)

This PHP package will be useful for simple self-signed SLL certificate generation exclusively using only PHP (absolutely none OpenSSL console launches).

### Requirements

[](#requirements)

- **PHP &gt;= 8.1**

### Installation

[](#installation)

#### Using composer (recommended)

[](#using-composer-recommended)

```
composer phprivoxy/x509
```

### Manual certificate generation sample

[](#manual-certificate-generation-sample)

```
$rootNames = new PHPrivoxy\X509\DTO\Names('RU', 'PHP proxy', null, 'PHPrivoxy');
$rootCert = new PHPrivoxy\X509\DTO\Certificate($rootNames, ''ROOT_CA.crt');
$rootKey = new PHPrivoxy\X509\DTO\PrivateKey('ROOT_CA.key');
$rootCertCreator = new PHPrivoxy\X509\RootCertificateCreator($rootCert, $rootKey);
$rootCertCreator->getCertificate(); // It write CA certificate and it private key into it's files.

$names = new Names('RU', 'TEST', null, 'test');
$numberOfDays = 365; // One year.
$domains = ['*.test.local', 'www.test.local', 'test.local', 'test2.local', 'test3.local']; // Multidomains certificate.
$dns = new DNS($domains);
$key = new PrivateKey('self-signed-certificate.key');
$cert = new Certificate($names, 'self-signed-certificate.crt', $numberOfDays, $dns);

$certCreator = new CertificateCreator($cert, $key, $rootCert, $rootKey);

// It write certificate and it private key into it's files.
// Also returns PHPrivoxy\X509\DTO\Certificate object.
$certCreator->getCertificate();
```

### Dynamic certificate generation by host name sample

[](#dynamic-certificate-generation-by-host-name-sample)

```
$rootNames = new PHPrivoxy\X509\DTO\Names('RU', 'PHP proxy', null, 'PHPrivoxy');
$rootCertificate = new PHPrivoxy\X509\DTO\Certificate($rootNames, ''ROOT_CA.crt');
$rootKey = new PHPrivoxy\X509\DTO\PrivateKey('ROOT_CA.key');

$certificateDir = __DIR__ . 'certificates';
// If certificate directory (third argument) is null, certificate files don't be write (only generated).
$creator = new PHPrivoxy\X509\ServerCertificateCreator($rootCertificate, $rootKey, $certificateDir);

// Create files "certificates/test1.local.key" and "certificates/test1.local.crt".
$obj1 = $creator->createCertificate('test1.local');

// Create files "certificates/test2.local.key" and "certificates/test2.local.crt".
$obj2 = $creator->createCertificate('test2.local');

print_r($obj2); // Contains PHPrivoxy\X509\DTO\Certificate object.
```

Full samples you may find in "tests/create.php" and "tests/server.php" files - just run it:

```
php tests/create.php
```

```
php tests/server.php
```

Don't forget to add your generated self-signed CA certificate (ROOT\_CA.crt in this samples) in trusted certificates!

### License

[](#license)

MIT License See [LICENSE](LICENSE)

###  Health Score

22

—

LowBetter than 21% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity7

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity45

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

9

Last Release

737d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/172364593?v=4)[PHPrivoxy](/maintainers/phprivoxy)[@phprivoxy](https://github.com/phprivoxy)

---

Top Contributors

[![phprivoxy](https://avatars.githubusercontent.com/u/172364593?v=4)](https://github.com/phprivoxy "phprivoxy (14 commits)")

---

Tags

httpsx509crtcertificatepemopensslcertificatesauthoritysslkeycacertificationopen-sslself-signedx-509selfsigned

### Embed Badge

![Health badge](/badges/phprivoxy-x509/health.svg)

```
[![Health](https://phpackages.com/badges/phprivoxy-x509/health.svg)](https://phpackages.com/packages/phprivoxy-x509)
```

###  Alternatives

[acmephp/core

Raw implementation of the ACME protocol in PHP

411.0M8](/packages/acmephp-core)[kelunik/certificate

Access certificate details and transform between different formats.

11145.9M13](/packages/kelunik-certificate)[acmephp/ssl

PHP wrapper around OpenSSL extension providing SSL encoding, decoding, parsing and signing features

151.4M4](/packages/acmephp-ssl)[acmephp/acmephp

Let's Encrypt client written in PHP

650159.8k](/packages/acmephp-acmephp)[kelunik/acme

ACME library written in PHP.

121610.5k3](/packages/kelunik-acme)[paragonie/certainty

Up-to-date, verifiable repository for Certificate Authorities

2662.6M22](/packages/paragonie-certainty)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
