{"id":699,"date":"2008-06-17T08:11:54","date_gmt":"2008-06-17T07:11:54","guid":{"rendered":"http:\/\/my.stargazer.at\/?p=699"},"modified":"2020-06-15T11:49:16","modified_gmt":"2020-06-15T09:49:16","slug":"apache-and-openssl","status":"publish","type":"post","link":"https:\/\/my.stargazer.at\/de\/2008\/06\/17\/apache-and-openssl\/","title":{"rendered":"Apache und OpenSSL"},"content":{"rendered":"<p>Es war mal wieder so weit &#8211; das SSL Zertifikat meines Webservers ist abgelaufen. Nicht nur der paar Fehlermeldungen wegen empfielt es sich, ein neues Zertifikat zu besorgen.<\/p>\n<p>Dazu gibt es zwei M\u00f6glichkeiten: Zum einen kann man bei offiziellen Zertifizierungsstellen einen Antrag stellen, oder wie ich ein eigenes Zertifikat generieren. Letzteres ist jedoch f\u00fcr die offizielle Nutzung nicht empfehlenswert.<\/p>\n<p><!--more--><\/p>\n<h3>Schritt 1: Der private Schl\u00fcssel<\/h3>\n<p>Wir verwenden einen RSA Key mit 1024 bit und einer Triple-DES Verschl\u00fcsselung. Um den Key in als ASCII Text abspeichern zu k\u00f6nnen, muss er im PEM Format vorliegen.<\/p>\n<blockquote><p><code>openssl genrsa -des3 -out server.key 1024<\/p>\n<p>  Generating RSA private key, 1024 bit long modulus<br \/>\n .........................................................++++++<br \/>\n ........++++++<br \/>\n e is 65537 (0x10001)<br \/>\n Enter PEM pass phrase:<br \/>\n Verifying password - Enter PEM pass phrase:<\/code><\/p><\/blockquote>\n<p><\/p>\n<h3>Schritt 2: CSR (Certificate Signing Request)<\/h3>\n<p>Der CSR ist sowas wie das Antragsformular, mit dem man zu den Zertifizierungsstellen wie Verisign oder <a href=\"http:\/\/www.thawte.com\/\">Thawte<\/a> pilgert, um es \u00fcberpr\u00fcfen zu lassen &#8211; oder eben wie ich hier ein eigenes Zertifikat baut. <\/p>\n<p>Beim Generieren des CSR wird man zwangsl\u00e4ufig \u00fcber die Frage nach dem &#8222;Common Name (e.g., YOUR name)&#8220; stolpern. Die richtige Antwort hier ist die URL f\u00fcr den das Zertifikat verwendet werden soll, da ansonsten der Webbrowser eine Warnung ausspuckt. F\u00fcr mein Blog w\u00e4re das hier &#8218;my.stargazer.at&#8216;.<\/p>\n<blockquote><p><code><br \/>\nopenssl req -new -key server.key -out server.csr<\/p>\n<p> Country Name (2 letter code) [AT]:AT<br \/>\n State or Province Name (full name) [Feldkirch]:Feldkirch<br \/>\n Locality Name (eg, city) [Nofels]:Nofels<br \/>\n Organization Name (eg, company) [My Company Ltd]:STARGAZER systems<br \/>\n Organizational Unit Name (eg, section) []:IT Core services<br \/>\n Common Name (eg, your name or your server's hostname) []:my.stargazer.at<br \/>\n Email Address []: *****@******.***<br \/>\n Please enter the following 'extra' attributes<br \/>\n to be sent with your certificate request<br \/>\n A challenge password []:<br \/>\n An optional company name []:<br \/>\n<\/code><\/p><\/blockquote>\n<p><\/p>\n<h3>Schritt 3: Das Passwort vom Zertifikat entfernen<\/h3>\n<p>Auch wenn dir dieser Schritt nun sinnlos oder gar wahnsinnig erscheint, ist er dennoch n\u00f6tig. Um dies zu verstehen, sehen wir uns einmal einen Webserver an. Man startet ihn im entsprechenden Runlevel und dann muss das Ding laufen ohne dumm rumzumeckern. Und genau da liegt das Problem: Der Webserver kann den Server Key, wenn es mit einem Passwort gesch\u00fctzt ist, nicht einfach verwenden, sondern muss nachfragen, was einen unbeaufsichtigten Start unm\u00f6glich macht. (Wir entfernen die Verschl\u00fcsselung vom Key)<\/p>\n<blockquote><p><code><br \/>\ncp server.key server.key.org<br \/>\nopenssl rsa -in server.key.org -out server.key<br \/>\n<\/code><\/p><\/blockquote>\n<p><\/p>\n<h3>Schritt 4: Das Zertifikat generieren<\/h3>\n<p>Jetzt geht es endlich an das lang ersehnte Zertifikat. Als G\u00fcltigkeitsdauer sollte ein Jahr vorerst reichen. Danach lesen wir uns wieder ;)<\/p>\n<blockquote><p><code>openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt<br \/>\n Signature ok<br \/>\n subject=\/C=AT\/ST=Feldkirch\/L=Nofels\/O=STARGAZER systems\/OU=IT Core services\/CN=my.stargazer.at\/Email=*****@******.***<br \/>\n Getting Private key<\/code><\/p><\/blockquote>\n<p><\/p>\n<h3>Schritt 5: Das Zertifikat einbauen<\/h3>\n<p>Wir haben nun die Dateien server.crt und server.key erhalten, welche wir nun sichern und schliesslich in den Webserver einbauen. Ich f\u00fcr meinen Teil verwende einen Apache Webserver. Die Konfiguration des SSL vHosts ist dabei relativ einfach. Der Vollst\u00e4ndigkeit halber, liefere ich hier einmal den entsprechenden Ansatz:<\/p>\n<blockquote><p><code>SSLEngine on<br \/>\n SSLCertificateFile \/etc\/apache2\/ssl\/ssl.crt\/server.crt<br \/>\n SSLCertificateKeyFile \/etc\/apache2\/ssl\/ssl.key\/server.key<br \/>\n SetEnvIf User-Agent \".*MSIE.*\" nokeepalive ssl-unclean-shutdown<br \/>\n CustomLog logs\/ssl_request_log \\<br \/>\n    \"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \\\"%r\\\" %b\"<\/code><\/p><\/blockquote>\n<p><\/p>\n<h3>Schritt 6: Den Webserver neu starten<\/h3>\n<p>Der letzte Schritt ist nun ein Neustart des Webservers und ein Test der Webseite, um zu sehen ob alles klappt.<\/p>","protected":false},"excerpt":{"rendered":"<p>Es war mal wieder so weit &#8211; das SSL Zertifikat meines Webservers ist abgelaufen. Nicht nur der paar Fehlermeldungen wegen empfielt es sich, ein neues Zertifikat zu besorgen. Dazu gibt es zwei M\u00f6glichkeiten: Zum einen kann man bei offiziellen Zertifizierungsstellen einen Antrag stellen, oder wie ich ein eigenes Zertifikat generieren. Letzteres ist jedoch f\u00fcr die offizielle Nutzung nicht [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[326,170,163],"class_list":["post-699","post","type-post","status-publish","format-standard","hentry","category-it-related-stuff","tag-website","tag-security","tag-server"],"_links":{"self":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts\/699","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/comments?post=699"}],"version-history":[{"count":0,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/posts\/699\/revisions"}],"wp:attachment":[{"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/media?parent=699"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/categories?post=699"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/my.stargazer.at\/de\/wp-json\/wp\/v2\/tags?post=699"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}