#language cs
## 25.08.2015 AK
----
 '''česky''' | [[CSRGenerator|english]]
----
## stránka byla přejmenována z VhostsApache

Informace o nastavení [[Technology/TechnicalSupport/SysAdmin/ApacheServer/CZ| serveru Apache]] - odkazy, aby sloužil několika webům HTTPS na jedné IP adrese, viz též VhostTaskForce.

Názvy všech domén, které chcete použít, musí být registrovány u http://www.cacert.org/, než můžete generovat certifikát.

= Generování žádosti o certifikát pro webový server =
Nejsnazší způsob je použít skript Generátor žádosti o podpis certifikátu (CSR) (soubor "csr") pro shell:

[[http://svn.cacert.org/CAcert/Software/CSRGenerator/csr|Generátor CSR]]

Lokálně ho uložte a pak spusťte, nezapomeňte opakovat běžný název (!CommonName) i v alternativním názvu předmětu (!SubjectAltName); krátký název serveru je použit jen pro název souboru.

Příklad činnosti skriptu:

## {{{
|| `[example@example ~]$ sh csr` || ||
|| `Private Key and Certificate Signing Request Generator` || Generátor privátního klíče a žádosti o podpis certifikátu ||
|| `This script was designed to suit the request format needed by` || Tento skript byl navržen pro formát žádosti potřebné ||
|| `the CAcert Certificate Authority: www.cacert.org` || pro certifikační autoritu CAcert: www.cacert.org ||
|| `Short Hostname (ie. imap big_srv www2): example` || Krátký název serveru ||
|| `FQDN/CommonName (ie. www.example.com) : example.org` || FQDN/běžný název serveru (viz Glosář níže) ||
|| `Type SubjectAltNames for the certificate, one per line. Enter a blank line to finish` || Zadávejte alternativní názvy jeden na řádek, prázdný řádek ukončí ||
|| `SubjectAltName: DNS:example.org` || ||
|| `SubjectAltName: DNS:www.example.org` || ||
|| `SubjectAltName: DNS:foo.example.org` || ||
|| `SubjectAltName: DNS:www.foo.example.org` || ||
|| `SubjectAltName: DNS:bar.example.org` || ||
|| `SubjectAltName: DNS:www.bar.example.org` || ||
|| `SubjectAltName: DNS:example.bar` || ||
|| `SubjectAltName: DNS:www.example.bar` || ||
|| `SubjectAltName: DNS:` || ||
|| `Running OpenSSL...` || Spouštím OpenSSL... ||
|| `Generating a 2048 bit RSA private key` || Generuji 2048-bitový privátní klíč RSA ||
|| `........................................................+++` || ||
|| `................................................+++` || (a zároveň veřejný klíč) ||
|| `writing new private key to '/home/example/example_privatekey.pem'` || zapisuji nový privátní klíč do... ||
|| `-----` || ||
|| `Copy the following Certificate Request and paste into CAcert website to obtain a Certificate.` || Zkopírujte následující žádost (CSR) a vložte ji do formuláře webu CAcert ||
|| `When you receive your certificate, you 'should' name it something like example_server.pem` || Když obdržíte certifikát, ''měli byste'' ho pojmenovat example_server.pem ||
 . `-----BEGIN CERTIFICATE REQUEST-----`
 . `MIIDBjCCAe4CAQAwFjEUMBIGA1UEAxMLZXhhbXBsZS5vcmcwggEiMA0GCSqGSIb3`
 . `DQEBAQUAA4IBDwAwggEKAoIBAQClsXcoj86dyYlIe96khbZqYtyV03ak+teyClv5`
 . `80I46irKcYQx4CFiirTCuusiAwsDfnDyZvnrwoxaUkc5nkw4Tlmb1j/y91U8rusX`
 . `Zu43rep8s0zs7aMx/q34TTCc5Mru8UQjbnj9aCX1DF+8cA0ayQMm1BOFv8nTFcjK`
 . `SnI5NdxRKDyqeH3KUgfxgGkBVU4VFVRU9XKD/zprzj+hWFT+fsjF7yQm0ZXDXaJ+`
 . `0Yr9mDQjfzdLP3GObc7y7rwz8a5ozATwfpqZiWYjM34oKFPSj7kwLdA+otx0glGG`
 . `e+P7G/E2uE+lbzi41CSFgKAjw3E0l1x47NoVD6DADS5mYIatAgMBAAGggaowgacG`
 . `CSqGSIb3DQEJDjGBmTCBljCBkwYDVR0RBIGLMIGIggtleGFtcGxlLm9yZ4IPd3d3`
 . `LmV4YW1wbGUub3Jngg9mb28uZXhhbXBsZS5vcmeCE3d3dy5mb28uZXhhbXBsZS5v`
 . `cmeCD2Jhci5leGFtcGxlLm9yZ4ITd3d3LmJhci5leGFtcGxlLm9yZ4ILZXhhbXBs`
 . `ZS5iYXKCD3d3dy5leGFtcGxlLmJhcjANBgkqhkiG9w0BAQQFAAOCAQEAHFiUDgVc`
 . `lDGoq+2kLmQxKtYagc37sugw4OoutILxrXF0zJUSplF4Aco/KhBcSLQUpsW5u11Q`
 . `tcxj4DqXrxsoZuawATKTGQXDaAxL/ud2FsXyhe2FC1h0id2cH12GsnDSziuFCM+t`
 . `rz05dqnW6mZR5OHILlYPoIPNqk3tbkIyOs4GplL9PZLNjSKJ3oeXJXn1iSI6oegB`
 . `dBJQMByDZsh7Xd/d1OFJMQq3TFMqmLEXErkXQnOmzBN375AHGYGZwozhVPjhfFZ1`
 . `74AvmxOe17+OLm1j10EA9J/5jLzIgK0vs7HgK0131S/JAV4Ik9JccAWByGlxeuVb`
 . `4Kf5vAucZZVe7g==`
 . `-----END CERTIFICATE REQUEST-----`
|| `The Certificate request is also available in /home/example/example_csr.pem` || Žádost o podpis certifikátu je také uložena v souboru /home/example/example_csr.pem ||
|| `The Private Key is stored in /home/example/example_privatekey.pem` || Privátní klíč je uložen v souboru /home/example/example_privatekey.pem ||
## }}}

Pak vložte svou žádost do webového formuláře na web cacert.org (pro příklad konfigurace, uvedený dále, požádejte o certifikát třídy 1) a když dostanete serverový certifikát, uložte ho jako example_server.pem.

== Příklad konfigurace ==
Můžete zadat IP adresu nebo použít skupinu (wild card), ale nemůžete je míchat. Ke konfiguraci Apache lze přidat ''"Listen 192.168.0.1:443"''.

{{{
NameVirtualHost 192.168.0.1:443
# nebo
# NameVirtualHost *:443
# foo.example.org:443
<VirtualHost 192.168.0.1:443>
# nebo
# <VirtualHost *:443>
  ServerName foo.example.org:443
  UseCanonicalName On
  SSLEngine on
  SSLCertificateFile /etc/apache/example_server.pem
  SSLCertificateKeyFile /etc/apache/example_privatekey.pem
  SSLCipherSuite HIGH
  SSLProtocol all -SSLv2
  DocumentRoot "/var/www/foo.example.org"
  <Directory "/var/www/foo.example.org">
    Options Indexes
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>
# www.foo.example.org:443
<VirtualHost 192.168.0.1:443>
# nebo
# <VirtualHost *:443>
  ServerName www.foo.example.org:443
  UseCanonicalName On
  SSLEngine on
  SSLCertificateFile /etc/apache/example_server.pem
  SSLCertificateKeyFile /etc/apache/example_privatekey.pem
  SSLCipherSuite HIGH
  SSLProtocol all -SSLv2
  Redirect / https://foo.example.org/
</VirtualHost>
# example.foo:443
<VirtualHost 192.168.0.1:443>
# nebo
# <VirtualHost *:443>
  ServerName example.foo:443
  UseCanonicalName On
  SSLEngine on
  SSLCertificateFile /etc/apache/example_server.pem
  SSLCertificateKeyFile /etc/apache/example_privatekey.pem
  SSLCipherSuite HIGH
  SSLProtocol all -SSLv2
  Redirect / https://foo.example.org/
</VirtualHost>
# www.example.foo:443
<VirtualHost 192.168.0.1:443>
# nebo
# <VirtualHost *:443>
  ServerName www.example.foo:443
  UseCanonicalName On
  SSLEngine on
  SSLCertificateFile /etc/apache/example_server.pem
  SSLCertificateKeyFile /etc/apache/example_privatekey.pem
  SSLCipherSuite HIGH
  SSLProtocol all -SSLv2
  Redirect / https://foo.example.org/
</VirtualHost>
# bar.example.org:443
<VirtualHost 192.168.0.1:443>
# nebo
# <VirtualHost *:443>
  ServerName bar.example.org:443
  UseCanonicalName On
  SSLEngine on
  SSLCertificateFile /etc/apache/example_server.pem
  SSLCertificateKeyFile /etc/apache/example_privatekey.pem
  SSLCipherSuite HIGH
  SSLProtocol all -SSLv2
  DocumentRoot "/var/www/bar.example.org"
  <Directory "/var/www/bar.example.org">
    Options Indexes
    AllowOverride None
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>
# www.bar.example.org:443
<VirtualHost 192.168.0.1:443>
# nebo
# <VirtualHost *:443>
  ServerName www.bar.example.org:443
  UseCanonicalName On
  SSLEngine on
  SSLCertificateFile /etc/apache/example_server.pem
  SSLCertificateKeyFile /etc/apache/example_privatekey.pem
  SSLCipherSuite HIGH
  SSLProtocol all -SSLv2
  Redirect / https://bar.example.org/
</VirtualHost>
# example.bar:443
<VirtualHost 192.168.0.1:443>
# nebo
# <VirtualHost *:443>
  ServerName example.bar:443
  UseCanonicalName On
  SSLEngine on
  SSLCertificateFile /etc/apache/example_server.pem
  SSLCertificateKeyFile /etc/apache/example_privatekey.pem
  SSLCipherSuite HIGH
  SSLProtocol all -SSLv2
  Redirect / https://bar.example.org/
</VirtualHost>
# www.example.bar:443
<VirtualHost 192.168.0.1:443>
# nebo
# <VirtualHost *:443>
  ServerName www.example.bar:443
  UseCanonicalName On
  SSLEngine on
  SSLCertificateFile /etc/apache/example_server.pem
  SSLCertificateKeyFile /etc/apache/example_privatekey.pem
  SSLCipherSuite HIGH
  SSLProtocol all -SSLv2
  Redirect / https://bar.example.org/
</VirtualHost>
}}}

== Chyby neshody doménového jména ==
Pravděpodobně jsou různé způsoby, jak dostat chybové hlášení "Domain Name Mismatch" při nastavování Apache pro více virtuálních HTTPS serverů.

Příklad zobrazení této chyby je zde: https://en.wiki.aktivix.org/CAcert

=== Použití kanonického názvu (UseCanonicalName) ===
Apache má standardně funkci !UseCanonicalName zapnutou (On) a pak můžete použít jeden !VirtualHost s několika !ServerAliasy, a všechny ty !ServerAliasy i !ServerName musí být uloženy v certifikátu.

Pokud ovšem máte !UseCanonicalName vypnuto (Off), pak nemůžete použít žádný !ServerAlias a musíte mít jeden !VirtualHost na každý !ServerName a nastavit všechny !VirtualHosty pro použití téhož certifikátu.

Viz dokumentaci Apache: http://httpd.apache.org/docs/2.0/mod/core.html#usecanonicalname

=== Opakování CommonName jako SubjectAltName ===
!CommonName se ignoruje, máte-li aspoň jedno !SubjectAltName, takže je nejlépe opakovat !CommonName jako !SubjectAltName. Když to neuděláte, pak nastavení !VirtualHost se !ServerName stejným jako !CommonName vyústí hlášením chyby Domain Name Mismatch.

== Generátor CSR pro Windows ==

http://www2.futureware.at/~philipp/CSRGenerator.zip

== Viz též ==
 * https://docs.indymedia.org/view/Sysadmin/CaCertSsl#HTTP_multiple_domain_names
 * http://www.frank4dd.com/webcert/cgi-bin/buildrequest.cgi

= Glosář =
 * !CanonicalName - "jméno podle pravidel", tak, jak je zapsáno v DNS záznamu A nebo AAAA, nikoli alias CNAME
 * !CommonName - "běžné jméno", obvyklý název, zpravidla FQDN, ale i prostý bez domény
 * FQDN - (Fully Qualified Domain Name), plně kvalifikovaný doménový název, zpravidla A/AAAA s doménou nebo i CNAME s doménou
 * Hostname - název "hosta" tj. v našem případě počítače, který je webovým serverem
 * !ServerAlias - alternativní název nebo přezdívka nebo CNAME serveru
 * !ServerName - (hlavní) název serveru, zde jde o ten, který je uveden v certifikátu na úvodní stránce, pro nějž je certifikát vystaven
 * Short Hostname - krátký název serveru, nekvalifikovaný (bez domény), jednoduchý (například GOLEM nebo ALKA)
 * !SubjectAltName - Alternativní název subjektu, používá se v certifikátech pro aliasy serverů (SAN, Subject Alternate Names)
 * !UseCanonicalName - direktiva konfigurace Apache (On/Off), mění režim hledání/kontroly názvu webového serveru
 * !VirtualHost - klausule konfigurace jednoho virtuálního webového serveru v Apache

----
 . CategoryGuide
 . CategorySoftware