{"id":319,"date":"2012-10-17T15:24:19","date_gmt":"2012-10-17T13:24:19","guid":{"rendered":"http:\/\/clark.tipistrani.it\/?p=319"},"modified":"2016-04-18T15:24:55","modified_gmt":"2016-04-18T13:24:55","slug":"ssl-generazione-di-certificati-per-uso-proprio","status":"publish","type":"post","link":"http:\/\/clark.tipistrani.it\/?p=319","title":{"rendered":"SSL generazione di certificati per uso proprio"},"content":{"rendered":"<p>Poich\u00e9 sono ferocemente avverso al\u00a0 traffico web in chiaro,\u00a0 ho fatto in modo che il CRM aziendale\u00a0 lavorasse in https al posto che in http.<br \/>\nIl discorso \u00e8 abbastanza semplice per come la vedo io e lo ripeter\u00f2 sino alla nausea in queste pagine, la sicurezza assoluta non esiste, ma il rendere la vita dannatamente dura a chi non ha nulla di meglio da fare nella vita si pu\u00f2 e secondo me si deve.<br \/>\nNoi sostanzialmente non siamo un industria High Tech che vale davvero la pena di sfondare, quindi la gente &#8220;seria&#8221; non ci calcola neanche, restano tutti gli altri di mezza tacca a cui se rendi la vita difficile dopo un po mollano il colpo e provano altrove.<br \/>\nL&#8217;applicativo in questione non richiede onestamente la spesa di un certificato firmato digitalmente da un&#8217;autority, quindi ho deciso che l&#8217;autority sono IO!<br \/>\nTutte le operazioni vanno eseguite come root, una volta installato openssl ho creato una directory sotto \/etc\/ssl\/ col nome della mia ditta, e una volta posizionato li ho creato la chiave principale con<\/p>\n<p>openssl genrsa -des3 -out myfirm-CA.key 4096<br \/>\nGenerating RSA private key, 4096 bit long modulus<br \/>\n&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.++<br \/>\n&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..++<br \/>\ne is 65537 (0x10001)<br \/>\nEnter pass phrase for myfirm-CA.key:<br \/>\nVerifying &#8211; Enter pass phrase for myfirm-CA.key:<br \/>\ne ho messo unabellapasswordlungaecomplicata<\/p>\n<p>\u00c8\u00a0 adesso il momento di generare il\u00a0 certificato<\/p>\n<p>openssl req -new -key myfirm-CA.key -x509 -days 3650 -out myfirm-CA.crt<\/p>\n<p>Il comando <code>req<\/code> serve a creare una richiesta di certificato\u00a0 o a generare un certificato autofirmato come nel nostro caso.<br \/>\nCon <code>-new<\/code> specifichiamo che si tratta di una nuova richiesta in modo da poter inserire tutti i dati relativi al certificato.<br \/>\nL&#8217;opzione <code>-key<\/code> indica la chiave privata usata per firmare il certificato, <code>-x509<\/code> il formato del certificato, <code>-days<\/code> la validit\u00e0 in giorni del certificato in questo caso 10 anni, <code>-out<\/code> il nome del file generato per contenere il certificato.<\/p>\n<p>Enter pass phrase for myfirm-CA.key:unabellapasswordlungaecomplicata<\/p>\n<p>You are about to be asked to enter information that will be incorporated<\/p>\n<p>into your certificate request.<\/p>\n<p>What you are about to enter is what is called a Distinguished Name or a DN.<\/p>\n<p>There are quite a few fields but you can leave some blank<\/p>\n<p>For some fields there will be a default value,<\/p>\n<p>If you enter &#8216;.&#8217;, the field will be left blank.<\/p>\n<p>&#8212;&#8211;<\/p>\n<p>Country Name (2 letter code) [AU]:IT<\/p>\n<p>State or Province Name (full name) [Some-State]:Italy<\/p>\n<p>Locality Name (eg, city) []:Milano<\/p>\n<p>Organization Name (eg, company) [Internet Widgits Pty Ltd]:myfirm S.p.A.<\/p>\n<p>Organizational Unit Name (eg, section) []:Certification Autority<\/p>\n<p>Common Name (e.g. server FQDN or YOUR name) []:myfirm CA<\/p>\n<p>Email Address []:root@myfirm.com<\/p>\n<p>e con questo ho finito di essere autority e torno SysAdmin.<\/p>\n<p>Si tratta adesso di generare la chiave privata per il server la procedura \u00e8 sostanzialmente la stessa di prima cambia la lunghezza della chiave<\/p>\n<p>openssl genrsa -des3 -out crm.myfirm.com.key 2048<br \/>\nGenerating RSA private key, 2048 bit long modulus<br \/>\n&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..+++<br \/>\n&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;.+++<br \/>\ne is 65537 (0x10001)<br \/>\nEnter pass phrase for crm.myfirm.com.key:trovalaseseicapace<br \/>\nVerifying &#8211; Enter pass phrase for crm.myfirm.com.key:trovalaseseicapace<\/p>\n<p>e\u00a0 la chiave \u00e8&#8217; a posto<\/p>\n<p>Procedo con la richiesta di certificato che sar\u00e0 emesso dalla mia autority , la procedura \u00e8 sostanzialmente la stessa ma N.B. il Common Name DEVE corrispondere all&#8217;indirizzo\u00a0 usato per la connessione SSL in questo caso crm.myfirm.com<\/p>\n<p>root@crm:\/etc\/ssl\/myfirm# openssl req -new -key crm.myfirm.com.key -out crm.myfirm.com.csr<br \/>\nEnter pass phrase for crm.myfirm.com.key:trovalaseseicapace<br \/>\nYou are about to be asked to enter information that will be incorporated<br \/>\ninto your certificate request.<br \/>\nWhat you are about to enter is what is called a Distinguished Name or a DN.<br \/>\nThere are quite a few fields but you can leave some blank<br \/>\nFor some fields there will be a default value,<br \/>\nIf you enter &#8216;.&#8217;, the field will be left blank.<br \/>\n&#8212;&#8211;<br \/>\nCountry Name (2 letter code) [AU]:IT<br \/>\nState or Province Name (full name) [Some-State]:Italy<br \/>\nLocality Name (eg, city) []:Inveruno<br \/>\nOrganization Name (eg, company) [Internet Widgits Pty Ltd]:myfirm S.p.A.<br \/>\nOrganizational Unit Name (eg, section) []:Servizi Web<br \/>\nCommon Name (e.g. server FQDN or YOUR name) []:crm.myfirm.com<br \/>\nEmail Address []:root@myfirm.com<\/p>\n<p>Please enter the following &#8216;extra&#8217; attributes<br \/>\nto be sent with your certificate request<br \/>\nA challenge password []:<br \/>\nAn optional company name []:<\/p>\n<p>Rimetto il cappello da autority e\u00a0 genero il certificato in formato x509\u00a0 per il sito firmato con la chiave privata della CA<\/p>\n<p>root@crm:\/etc\/ssl\/myfirm# openssl x509 -req -in crm.myfirm.com.csr -out crm.myfirm.com.crt -sha1 -CA myfirm-CA.crt -CAkey myfirm-CA.key -CAcreateserial -days 3650<br \/>\nSignature ok<br \/>\nsubject=\/C=IT\/ST=Italy\/L=Inveruno\/O=Myfirm S.p.A.\/OU=Servizi Web\/CN=crm.myfirm.com\/emailAddress=me@myfirm.com<br \/>\nGetting CA Private Key<br \/>\nEnter pass phrase for myfirm-CA.key:unabellapasswordlungaecomplicata<\/p>\n<p>e abbiamo il nostro bel certificato pronto per essere usato.<\/p>\n<p>Nota a margine, per la prima volta in assoluto da quando compio questa operazione apache2 non ha funzionato al primo colpo, adesso non so se l&#8217;apache di Ubuntu \u00e8 diverso da quello di Debian, se questa macchina \u00e8 nata sotto una cattiva stella, se Mr Murphy s&#8217;\u00e8 ricordato del sottoscritto o che altro ma le cose stanno cos\u00ec.<br \/>\nRiassumo brevemente qui il problema e la soluzione anche se effettivamente \u00e8 una questione di apache, in sostanza all&#8217;avvio di apache il log diceva:<\/p>\n<p>[Fri Oct 12 14:28:20 2012] [error] Init: Private key not found<br \/>\n[Fri Oct 12 14:28:20 2012] [error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag<br \/>\n[Fri Oct 12 14:28:20 2012] [error] SSL Library Error: 218640442 error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error<br \/>\n[Fri Oct 12 14:28:20 2012] [error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag<br \/>\n[Fri Oct 12 14:28:20 2012] [error] SSL Library Error: 218595386 error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error<br \/>\n[Fri Oct 12 14:28:20 2012] [error] SSL Library Error: 67710980 error:04093004:rsa routines:OLD_RSA_PRIV_DECODE:RSA lib<br \/>\n[Fri Oct 12 14:28:20 2012] [error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag<br \/>\n[Fri Oct 12 14:28:20 2012] [error] SSL Library Error: 218595386 error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error<\/p>\n<p>uh? WTF??? l&#8217;hai la chiave fesso \u00e8\u00a0 in \/etc\/ssl\/ditta che vai cercando?<br \/>\nGooglando trovo la direttiva\u00a0 SSLCertificateKeyFile in buona sostanza il path dove cercare la chiave,\u00a0 e aggiungo al mio \/etc\/apache2\/sites-avaible\/crm.myfirm.com la direttiva con il relativo path SSLCertificateKeyFile \/etc\/ssl\/ditta\/crm.myfirm.com.key<br \/>\nal successivo apache2 restart mi chiede la password se la metto io a manina funziona se la macchina fa reboot non parte apache2 e\u00a0 il log presenta una cosa di questo tipo:<\/p>\n<p>[Fri Oct 12 16:16:23 2012] [error] Init: Pass phrase incorrect<br \/>\n[Fri Oct 12 16:16:23 2012] [error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag<br \/>\n[Fri Oct 12 16:16:23 2012] [error] SSL Library Error: 218640442 error:0D08303A:asn1 encoding routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1 error<br \/>\n[Fri Oct 12 16:16:23 2012] [error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag<br \/>\n[Fri Oct 12 16:16:23 2012] [error] SSL Library Error: 218595386 error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error<br \/>\n[Fri Oct 12 16:16:23 2012] [error] SSL Library Error: 67710980 error:04093004:rsa routines:OLD_RSA_PRIV_DECODE:RSA lib<br \/>\n[Fri Oct 12 16:16:23 2012] [error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag<br \/>\n[Fri Oct 12 16:16:23 2012] [error] SSL Library Error: 218595386 error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error<\/p>\n<p>&#8230;<\/p>\n<p>1\/4 d&#8217;ora di bestemmie dopo ricominco le ricerche in rete, e trovo la direttiva\u00a0 SSLPassPhraseDialog che inserisco nel mio sito crm.myfirm.com con questa scrittura:<\/p>\n<p>SSLPassPhraseDialog exec:\/etc\/ssl\/ditta\/funzionamaledetto (se per caso il lettore pensa che a questo punto fossi lievemente &#8220;alterato&#8221; ha perfettamente ragione) creo sotto \/etc\/ssl\/ditta\/ il file funzionamaledetto che contiene:<br \/>\n#!\/bin\/sh<br \/>\necho &#8220;unabellapasswordlungaecomplicata&#8221;<\/p>\n<p>riavvio apache2 e il risultato \u00e8<br \/>\nSSLPassPhraseDialog cannot occur within section<\/p>\n<p>e ma che $fallo!!!!!!!!! allora ce l&#8217;hai con me!!!!!!!<\/p>\n<p>ho risolto togliendo SSLPassPhraseDialog exec:\/etc\/ssl\/ditta\/funzionamaledetto da crm.myfirm.com e mettendola in apache2.conf subito prima dell&#8217;include dei siti praticamente alla fine.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"link64_adl_tabid\" style=\"display: none;\" data-url=\"http:\/\/clark.tipistrani.it\/wp-admin\/post.php?post=319&amp;action=edit\">242<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Poich\u00e9 sono ferocemente avverso al\u00a0 traffico web in chiaro,\u00a0 ho fatto in modo che il CRM aziendale\u00a0 lavorasse in https al posto che in http. Il discorso \u00e8 abbastanza semplice per come la vedo io e lo ripeter\u00f2 sino alla nausea in queste pagine, la sicurezza assoluta non esiste, ma il rendere la vita dannatamente [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,7,6],"tags":[],"class_list":["post-319","post","type-post","status-publish","format-standard","hentry","category-linux","category-sistemi-operativi","category-work"],"_links":{"self":[{"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/posts\/319","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=319"}],"version-history":[{"count":20,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/posts\/319\/revisions"}],"predecessor-version":[{"id":1296,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/posts\/319\/revisions\/1296"}],"wp:attachment":[{"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=319"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=319"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=319"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}