Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki 1 do 10 z 19

Temat: Własny certyfikat SSL

  1. #1

    Domyślnie Własny certyfikat SSL

    Witam wszystkich użytkowników.

    Szukając ciekawych artykułów na temat podpisywania własnych certyfikatów SSL spędziłem ponad 3 godziny. Mało jest tekstów na ten temat, a jeśli już to są w nich liczne błędy uniemożliwiające poprawne wystawienie sobie self-signed(własnoręcznie podpisanego) certyfikatu SSL. Kiedy już udało mi się wszystko "ogarnąć" postanowiłem, że podzielę się swoim doświadczeniem w tym zakresie.

    1. Co to jest i do czego służy certyfikat

    Certyfikaty służą do potwierdzenia swojej tożsamości.
    Są one głównie używanie do bezpiecznych połączeń między serwerem www a klientem, poza zabezpieczonym połączeniem certyfikat potwierdza także, że właściciel domeny(serwera z którym się połączyliśmy) został sprawdzony przez centrum certyfikacji.

    Przykład certyfikatu:
    Screen1.JPG
    Widzimy tu stronę google.pl. Koło adresu pojawia się zielona kłódka potwierdzająca szyfrowane, bezpieczne połączenie.

    2. Przygotowanie OpenSSL

    Certyfikat Root pozwoli nam na podpisywanie kolejnych certyfikatów, które wydamy.
    Po pierwsze: ściągamy OpenSSL, a następnie instalujemy.

    Tworzymy dowolny katalog w którym będą przechowywane nasze certyfikaty(dla mnie będzie to: C:\Users\Karol\ssl

    Otwieramy wiersz polecenia(Start->cmd.exe->ENTER)
    Nawigujemy do naszego nowo utworzonego katalogu poleceniem CD

    Kod:
    C:\Users\Karol>cd ssl
    
    C:\Users\Karol\ssl>
    Następnie uruchamiamy OpenSSL poleceniem:

    Kod:
    C:\Users\Karol\ssl>openssl
    OpenSSL>
    Widzimy, że OpenSSL zgłosiło się nam znakiem zachęty "OpenSLL>"

    Jesteśmy już gotowi do przeprowadzenia wszystkich potrzebnych operacji.

    3. Stworzenie własnego CA Root(Certification Authority Root Certificate)

    Utwórzmy katalog ca\ wewnątrz naszego katalogu z certyfikatami(dla mnie jest to: C:\Users\Karol\ssl\ca)
    Musimy zacząć od utworzenia klucza prywatnego
    Utworzymy teraz klucz RSA o długości 4096-bitów poleceniem:
    Kod:
    genrsa -des3 -out ca/ca.key 4096
    Zostaniemy poproszeni o powtórne wpisanie hasła(ważne aby go zapamiętać, nie ma opcji "Zapomniałem hasła", w przeciwnym wypadku musimy zacząć od nowa)
    (Nie przejmuj się, że nic się nie pojawia. Klucz jest odczytywany bez wyświetlania "*")

    Kod:
    OpenSSL> genrsa -des3 -out ca/ca.key 4096
    Loading 'screen' into random state - done
    Generating RSA private key, 4096 bit long modulus
    ..
    [...]
    ..
    e is 65537 (0x10001)
    Enter pass phrase for ca/ca.key:
    Verifying - Enter pass phrase for ca/ca.key:
    OpenSSL>
    Widzimy, że wszystko zostało ukończone pomyślnie.

    Teraz utworzymy nasz certyfikat w oparciu o klucz prywatny CA wydając polecenie:
    Kod:
    req -new -x509 -days 3650 -key ca/ca.key -out ca/ca.cer
    Kod:
    OpenSSL> req -new -x509 -days 3650 -key ca/ca.key -out ca/ca.cer
    Enter pass phrase for ca/ca.key: MUSIMY PODAĆ NASZE HASŁO
    [...]
    Country Name (2 letter code) [AU]:PL
    State or Province Name (full name) [Some-State]:Wojewodztwo
    Locality Name (eg, city) []:Miasto
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Firma
    Organizational Unit Name (eg, section) []:
    Common Name (eg, YOUR name) []:Disa's Root Certificate
    Email Address []:dis [at] mail [dot] rotf.pl
    OpenSSL>

    Tak jak wyżej podane, zostaniemy poproszeni o podanie kolejno:
    - Hasła prywatnego CA
    - Kod państwa
    - Województwa
    - Miasta
    - Naszej organizacji
    - Typ organizacji
    - Nazwę naszego certyfikatu ROOT CA
    - Adresu e-mail(podajemy go w postaci: user@domena, w powyższym kodzie specjalnie zamieniłem @ na [at] i . na [dot], aby uniknąć SPAM-u)
    - **Czasem zostaniemy poproszeni o dodatkowe dane, które pomijamy wciskając dwukrotnie ENTER

    Nasz certyfikat został utworzony, możemy dodać go teraz do naszego magazynu certyfikatów systemu.

    Otwieramy naszą lokalizację: \ssl\ca i dwukrotnie klikamy na: ca.cer, następnie w nowo otwartym oknie przycisk: "Zainstaluj Certyfikat..."
    W kreatorze: Dalej, "Umieść [...] w następującym magazynie", "Przeglądaj", "Zaufane główne urzędy certyfikacji", "Ok", "Dalej", "Zakończ".
    Teraz ponowne otworzenie certyfikatu pokaże, że jest on zaufany.



    4. Stworzenie certyfikatu SSL dla serwera WWW

    Ponownie tworzymy klucz prywatny(nie ten sam co dla certyfikatu CA ROOT).

    Kod:
    genrsa -des3 -out key.key 4096
    Nie będę tłumaczył ponownie tego kroku.

    ***[Ten krok jest opcjonalny, aczkolwiek polecam wykonanie go]***
    Usuniemy teraz hasło z naszego klucza prywatnego, jeśli tego nie zrobimy, przy każdym użyciu naszego certyfikatu będziemy zobowiązani podać nasze hasło. Wszystko było by dobrze, gdyby nie to, że przy każdym uruchomieniu naszego serwera WWW, musimy podać to hasło. Serwer może czasem się zrestartować i ssl nie będzie działał dopóki nie wpiszemy tego hasła.

    Kod:
    rsa -in key.key -out key.key
    Podajemy hasło i wciskamy ENTER
    ***[Koniec kroku opcjonalnego]***

    Następnie tworzymy CSR (Certificate Signing Request) czyli plik żądania certyfikatu.

    Kod:
    req -new -key key.key -out cerreq.csr
    Kod:
    OpenSSL> req -new -key key.key -out cerreq.csr
    [...]
    Country Name (2 letter code) [AU]:PL
    State or Province Name (full name) [Some-State]:Wojewodztwo
    Locality Name (eg, city) []:
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ogarnizacja
    Organizational Unit Name (eg, section) []:
    Common Name (eg, YOUR name) []:*.dekiel.disa
    Email Address []:dis at mail . rotf.pl
    
    [...]
    A challenge password []:
    An optional company name []:
    OpenSSL>
    Podobnie jak w przypadku wystawiania certyfikatu ROOT CA, jednak w tym przypadku "Common Name" musi być nazwą naszej domeny(dodanie na początku *. spowoduje, że zostanie utworzony tzw. wildcard, czyli certyfikat, który możemy używać na wszystkich naszych subdomenach np. www.mojadomena oraz mail.mojadomena) w moim przypadku jest to *.dekiel.disa(domena: dekiel.disa + wildcard dzięki któremu będę mógł używać subdomen z ssl)

    Kolejny krok to podpisane CSR naszym certyfikatem Root-a.

    Najpierw musimy utworzyć katalog: demoCA w ssl\, newcerts w ssl\demoCA\ oraz pliki(w demoCA\): index.txt(pusty), serial(zawartość: dowolna liczba w zapisie szestnastkowym)(bez rozszerzenia).

    Kod:
    ca -policy policy_anything -cert ca/ca.cer -in cerreq.csr -keyfile ca/ca.key -days 365 -out cer.cer
    Oczywiście możemy zedytować "-days 365" na liczbę dni na jaką chcemy wystawić certyfikat(ja wystawię na 10 dni)

    Kod:
    OpenSSL> ca -policy policy_anything -cert ca/ca.cer -in cerreq.csr -keyfile ca/c
    a.key -days 10 -out cer.cer
    Using configuration from C:\OpenSSL\bin\openssl.cfg
    Loading 'screen' into random state - done
    Enter pass phrase for ca/ca.key:
    Check that the request matches the signature
    Signature ok
    Certificate Details:
            Serial Number: 293 (0x125)
            Validity
                Not Before: Dec 15 13:36:48 2012 GMT
                Not After : Dec 25 13:36:48 2012 GMT
            Subject:
                countryName               = PL
                stateOrProvinceName       = Wojewodztwo
                organizationName          = Ogarnizacja
                commonName                = *.dekiel.disa
                emailAddress              = dis at mail . rotf.pl
            X509v3 extensions:
                X509v3 Basic Constraints:
                    CA:FALSE
                Netscape Comment:
                    OpenSSL Generated Certificate
                X509v3 Subject Key Identifier:
                    E9:5E:39:52:A8:AC:03:69:A7:B8:0B:6B:92:E8:E1:D6:6C:E5:DF:60
                X509v3 Authority Key Identifier:
                    keyid:66:F1:B3:9D:1E:8F:96:B3:EC:4F:0D:F9:7E:F7:0B:0B:5A:44:64:5
    1
    
    Certificate is to be certified until Dec 25 13:36:48 2012 GMT (10 days)
    Sign the certificate? [y/n]:y
    
    
    1 out of 1 certificate requests certified, commit? [y/n]y
    Write out database with 1 new entries
    Data Base Updated
    OpenSSL>
    Na początku podajemy hasło klucza prywatnego ROOT-a, ENTER, y, ENTER, y, ENTER.

    Nasz certyfikat jest już podpisany.




    5. Implementacja certyfikatu SSL na naszym serwerze www.

    W moim przypadku będę wykonywał operacje na moim localhoscie.
    Najpierw dodam wpisy do Hosts, aby www.dekiel.disa przekierować na 127.0.0.1 czyli mój komputer.

    C:\Windows\System32\drivers\etc\hosts

    Dodajemy na końcu:
    Kod:
    127.0.0.1 DOMENA
    Zapisujemy plik.


    Jeśli nie mamy jeszcze serwera www na naszym komputerze polecam użycie WAMPServer.

    Po zainstalowaniu klikamy na ikonkę W koło zegara systemowego, następnie: Apache, Apache Module, ssl_module.

    Wamp się zrestartuje, następnie: Klik, Apache, httpd.conf
    Otworzy nam się Notatnik, zjeżdżamy na sam dół i dopisujemy:

    Kod:
    NameVirtualHost *:443
     <VirtualHost *:443>
       SSLProtocol all -SSLv2
       SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
    
         DocumentRoot "C:/wamp/www"
         ErrorLog logs/ssl-error.log
         TransferLog logs/ssl-access.log
         SSLEngine On
         SSLCertificateFile conf/cer.cer
         SSLCertificateKeyFile conf/key.key
         SSLCACertificateFile conf/ca.cer
     SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
    SSLVerifyClient none
    SSLProxyEngine off
     </VirtualHost>
    Do katalogu(o ile nie zmieniliśmy ścieżki przy instalacji): C:\wamp\bin\Apache\Apache[Wersja]\conf

    Wrzucamy tu nasz klucz prywatny certyfikatu wystawionego dla domeny(Nie ROOT), certyfikat domeny oraz certyfikat Root.

    Restartujemy serwer, wpisujemy domenę w adresie, którą wybraliśmy w HOSTS:

    Screen2.JPG




    Gotowe!

    To mój pierwszy tutorial, czekam na Wasze komentarze!
    Załączone Obrazki Załączone Obrazki
    Ostatnio edytowane przez disa : 12-15-2012 - 15:16

  2. #2
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Witamy na forum i gratuluje tutoriala!
    Na pewno przyda sie wszystkim tym, ktorym jezyk angielski stwarza problemy.

    Cytat Napisał disa Zobacz post
    Mało jest tekstów na ten temat, a jeśli już to są w nich liczne błędy uniemożliwiające poprawne wystawienie sobie self-signed(własnoręcznie podpisanego) certyfikatu SSL.
    Serio?! Google: how to create self signed ssl certificate
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  3. #3

    Domyślnie

    Tak, ale większość z nich nie uwzględnia tworzenia certyfikatu Root-a CA, więc każdy certyfikat jest self-signed. To sprawia, że KAŻDY nowo wydany certyfikat musi być dodany do magazynu. Załóżmy, że tworzysz takich certyfikatów 50, każdy z nich musi zostać dodany na każdym komputerze.

    W moim tutorialu jest opisane tak, że wystarczy dodać jeden certyfikat roota, a wszystkie potomne będą od razu akceptowane.

    Poza tym, tak jak napisałem, wiele jest w nich błędów więc na pewnym kroku coś nie wychodzi i nie można pójść dalej.

    Kod:
    Serio?! Google: how to create self signed ssl certificate
    Przeczytałem 20 pierwszych wyników zanim stworzyłem ten tutorial, więc wiem co mówię.

  4. #4
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Absolutnie nie neguje i ciesze sie ze napisales tutorial. Malo kto zaczyna na forum w taki sposob wiec chwala za to.

    Nie zrozum mnie zle - ja po prostu rozrozniam self-signed i prowadzenie wlasnego CA. Jak rozpoczac wlasne CA i wystawiac certyfikaty mozna znalezc w google pod 'how to create private CA'.

    BTW. Kazda instalacja OpenVPN'a bazuje wlasnie na wlasnym CA (domyslnie, choc to mozna zmienic), gdzie klucz klienta musi byc podpisany tym samym kluczem co klucz serwera. CRL jest uzywany do odcinania dostepu - sprawzone, dziala wysmienicie!
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  5. #5

    Domyślnie

    Nie zrozum mnie zle - ja po prostu rozrozniam self-signed i prowadzenie wlasnego CA. Jak rozpoczac wlasne CA i wystawiac certyfikaty mozna znalezc w google pod 'how to create private CA'.
    Masz rację, wpisałem
    Kod:
    how to create private CA
    i wyskoczyły bardzo ciekawe wyniki na które wcześniej nie trafiłem. No cóż, z Google też trzeba umieć korzystać.

    Planuje w niedalekiej przyszłości otworzenie własnej strony oraz kanału YT z różnymi ciekawymi tutorialami, dlatego właśnie chciałem poznać opinię dotyczącą tego artykułu. Czy jest on wartościowy, czy jest pisany odpowiednim stylem, czy nie ma w nim rażących błędów.

  6. #6
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Tekst jest wartosciowy i przyzwoicie napisany aczkolwiek pare uwag aby przyszle publikacje byly jeszcze lepsze:
    - adres email musi byc [email protected] - nie stosujemy AT i takich tam, to warto by zaznaczyc wyraznie w tutorialu
    - piszac tutoriale zorganizuj sobie adres demo albo w ogole podawaj falszywke ewentualnie daj znac na PW to pokaze Ci pewne rozwiazanie ktore jakis czas temu zaprojektowalem
    - bardzo podoba mi sie ze podales SSLCipherSuite (wiekszosc ludzi uzywa domyslnego a to jest porazka) ale opcje ktore podales nie sa duzo lepsze niestety :-(

    Wyjasniam juz dlaczgo nie jest jak byc powinno - male porownanie... Oto co tak na prawde dzieje sie przy uzyciu Twojej konfiguracji:
    Kod:
    #### SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
    $ sslscan --no-failed $mojprywatnyserwer:443
                       _
               ___ ___| |___  ___ __ _ _ __
              / __/ __| / __|/ __/ _` | '_ \
              \__ \__ \ \__ \ (_| (_| | | | |
              |___/___/_|___/\___\__,_|_| |_|
    
                      Version 1.8.2
                 http://www.titania.co.uk
            Copyright Ian Ventura-Whiting 2009
    
    Testing SSL server $mojprywatnyserwer on port 443
    
      Supported Server Cipher(s):
        Accepted  SSLv3  256 bits  DHE-RSA-AES256-SHA
        Accepted  SSLv3  256 bits  AES256-SHA
        Accepted  SSLv3  128 bits  DHE-RSA-AES128-SHA
        Accepted  SSLv3  128 bits  AES128-SHA
        Accepted  SSLv3  168 bits  EDH-RSA-DES-CBC3-SHA
        Accepted  SSLv3  56 bits   EDH-RSA-DES-CBC-SHA
        Accepted  SSLv3  168 bits  DES-CBC3-SHA
        Accepted  SSLv3  56 bits   DES-CBC-SHA
        Accepted  SSLv3  128 bits  RC4-SHA
        Accepted  SSLv3  128 bits  RC4-MD5
        Accepted  TLSv1  256 bits  DHE-RSA-AES256-SHA
        Accepted  TLSv1  256 bits  AES256-SHA
        Accepted  TLSv1  128 bits  DHE-RSA-AES128-SHA
        Accepted  TLSv1  128 bits  AES128-SHA
        Accepted  TLSv1  168 bits  EDH-RSA-DES-CBC3-SHA
        Accepted  TLSv1  56 bits   EDH-RSA-DES-CBC-SHA
        Accepted  TLSv1  168 bits  DES-CBC3-SHA
        Accepted  TLSv1  56 bits   DES-CBC-SHA
        Accepted  TLSv1  128 bits  RC4-SHA
        Accepted  TLSv1  128 bits  RC4-MD5
    
      Prefered Server Cipher(s):
        SSLv3  256 bits  DHE-RSA-AES256-SHA
        TLSv1  256 bits  DHE-RSA-AES256-SHA
    
    [...]
    To cojest zle, jest pogrubione.
    1. Klucze krotsze niz 128-bit nie sa bezpieczne
    2. TLSv1 i SSLv3 nie sa bezpieczne jesli uzywaja trybu CBC
    3. Ja nie ufam RC4, zwlaszcza w wariancie z MD5

    Moja propozycja:
    Kod:
    ### SSLCipherSuite TLSv1+HIGH:!SSLv2:!RC4:!aNULL:!eNULL:!3DES:@STRENGTH
    
    $ sslscan --no-failed $mojprywatnyserwer:443
                       _
               ___ ___| |___  ___ __ _ _ __
              / __/ __| / __|/ __/ _` | '_ \
              \__ \__ \ \__ \ (_| (_| | | | |
              |___/___/_|___/\___\__,_|_| |_|
    
                      Version 1.8.2
                 http://www.titania.co.uk
            Copyright Ian Ventura-Whiting 2009
    
    Testing SSL server $mojprywatnyserwer on port 443
    
      Supported Server Cipher(s):
        Accepted  SSLv3  256 bits  DHE-RSA-AES256-SHA
        Accepted  SSLv3  256 bits  AES256-SHA
        Accepted  SSLv3  128 bits  DHE-RSA-AES128-SHA
        Accepted  SSLv3  128 bits  AES128-SHA
        Accepted  TLSv1  256 bits  DHE-RSA-AES256-SHA
        Accepted  TLSv1  256 bits  AES256-SHA
        Accepted  TLSv1  128 bits  DHE-RSA-AES128-SHA
        Accepted  TLSv1  128 bits  AES128-SHA
    
      Prefered Server Cipher(s):
        SSLv3  256 bits  DHE-RSA-AES256-SHA
        TLSv1  256 bits  DHE-RSA-AES256-SHA
    
    [...]
    Jak na razie nie mialem jeszcze problemu z tym ze ktos nie mogl otworzyc strony bo jego maszyna nie dawala rady. Kazda wspolczesna przegladarka daje rade, wlacznie z telefonami komorkowymi i tabletami.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  7. #7

    Domyślnie

    Dziękuję Ci za wyjaśnienie tego problemu.

    Dodałem do swojego httpd.conf linijkę, którą zasugerowałeś.

    m.jpg

    Nie wiem dlaczego(i czy to jest w porządku), że moja przeglądarka ustanowiła połączenie AES_256_CBC.

  8. #8
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Hmmm rzeczywiscie Chrome tak pokazuje - ciekawe, bede musial blizej zbadac bo CBC sie nie pokazuje na mojej liscie. Bardziej dawalbym wiary rezultatowi z sslscan'a niz Chrome ale lepiej sprawdzic.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  9. #9

    Domyślnie

    Więcej ciekawych tutoriali znajdziecie na mojej nowej stronie: Disa | Dev Blog Disy

  10. #10
    Zarejestrowany
    Aug 2013
    Skąd
    Warszawa
    Postów
    4

    Domyślnie Klucze via OpenSSL

    Witam,

    Czy ktoś z szanownych czytelników może mi podpowiedzieć jak utworzyć certyfikaty użytkownika do podpisywania dokumentów, podpisywania poczty i kodowania jej treści? Próbowałem z certyfikatem roota w windows live (win7 x64), ale bez skutecznie, niby importuje, ale nie jako osobisty (jako osobisty jest widoczny tylko ten utworzony przez windows do szyfrowania plików) i wiadomości podpisanej tym certyfikatem nie da się wysłać. Wsadziłem oczywiście certyfikat roota do osobistych i zaufanych, ale to nic nie daje.

    Może mi ktoś pomóc bo jestem zielony?

    Z góry dziękuję i pozdrawiam.

    PS. Czym różni się AES256 od DES3 bo utworzyłem sobie taki i taki klucz + klucz publiczny, nie wiem tylko za bardzo jak zakodować za pomocą tego klucza pliki. Moi znajomi też tak zrobili że utworzyli klucze prywatne tak by były tylko do własnego użytku i publiczne tak by się nimi powymieniać - bo to zdaje się działa na podobnej zasadzie jak kiedyś PGP w DOS'ie.

Strona 1 z 2 12 OstatniOstatni

Tagi

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj