Pokaż wyniki 1 do 10 z 19

Temat: Własny certyfikat SSL

Threaded View

Previous Post Previous Post   Next Post Next Post
  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

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