Syötä lomakkeeseen tiedot, niin palvelin generoi itse allekirjoitetun SSL-RSA-sertifikaatin. Palvelimen nimi on pakollinen, muut tiedot voi jättää täyttämättä.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>SSL-sertifikaattigeneraattori</title> <style type="text/css"> dt { width: 15em; float: left; } dd { margin-left: 15em; } </style> </head> <body> <h1>SSL-sertifikaattigeneraattori</h1> <p>Syötä lomakkeeseen tiedot, niin palvelin generoi itse allekirjoitetun SSL-RSA-sertifikaatin. Palvelimen nimi on pakollinen, muut tiedot voi jättää täyttämättä.</p> <form action="gen.php" method="post"> <dl> <dt>Palvelin:</dt><dd><input type="text" name="domain" placeholder="esimerkki.fi" pattern="[-.a-zA-Z0-9]+" /></dd> <dt>Ylläpitäjän sähköpostiosoite:</dt><dd><input type="text" name="email" placeholder="admin@esimerkki.fi" pattern="[-.a-zA-Z0-9+@]*" /></dd> <dt>Organisaatio:</dt><dd><input type="text" name="org" value="Esimerkki" pattern="[-.a-zA-Z0-9+@ :,]*" /></dd> <dt>Avaimen koko:</dt><dd><select name="bits"><option value="512">512</option><option value="1024">1024</option><option value="2048" selected>2048</option><option value="3072">3072</option></select> bittiä</dd> </dl> <button type="submit">Generoi!</button> </form> <h2>Lähdekoodit</h2> <?php foreach (array("index.php", "gen.php") as $f): ?> <h3><?= htmlspecialchars($f); ?></h3> <pre><?= htmlspecialchars(file_get_contents($f)); ?></pre> <?php endforeach; ?> </body> </html>
<?php $lukko = new class { private $f; public function __construct() { $this->f = fopen(__FILE__, "r"); if (!flock($this->f, LOCK_EX)) { throw Exception("Lukitusvirhe!"); } } public function __destruct() { flock($this->f, LOCK_UN); } }; sleep(1); $domain = preg_replace("#[^-.a-zA-Z0-9]#s", "", $_POST["domain"] ?? null); $email = preg_replace("#[^-.a-zA-Z0-9+@]#s", "", $_POST["email"] ?? null); $org = preg_replace("#[^-.a-zA-Z0-9+@ :,]#s", "", $_POST["org"] ?? null); $bits = intval($_POST["bits"] ?? null); $days = floor((0x7ffff000 - time()) / (24 * 60 * 60)); if (!$domain) die("Tarkista palvelimen osoite."); if (!in_array($bits, array(512, 1024, 2048, 3072))) die("Tarkista avaimen koko."); $subj = "/CN=$domain"; if ($org) $subj .= "/O=$org"; if ($email) $subj .= "/emailAddress=$email"; header("Content-Type: text/plain; charset=UTF-8"); header("Cache-Control: no-store"); echo shell_exec(" ( echo 'Generating certificate:' DATA=$(openssl req -x509 -config /dev/fd/0 -subj '$subj' -newkey rsa:$bits -days $days -passout pass:asdf -keyout /dev/fd/1 -out /dev/fd/1 <<<' RANDFILE=/dev/null distinguished_name=req_dn [req_dn] '); echo echo echo 'domain.key; this is the private key, keep it safe!' openssl rsa -passin pass:asdf <<<\"\$DATA\" echo echo 'domain.crt; this is the certificate.' openssl x509 <<<\"\$DATA\" echo echo 'Information:' echo openssl rsa -passin pass:asdf -text <<<\"\$DATA\" echo openssl x509 -text <<<\"\$DATA\" ) 2>&1" ); die();