9 Aralık 2022 Cuma

openssl req aracı İle CSR'yi İmzalamak Yani CSR'den Sertifika Üretmek

Giriş
CA : Certificate Authority belirtilir. Bu bir self signed certificate olabilir.
CAkey : Certificate Authority'nin private key dosyasıdır
out : Sertifika dosyasının ismidir

Örnek
CSR'den sertifika üretmek için şöyle yaparız. Burada minikube'a ait certificate authorities ve private key kullanılıyor.
openssl x509 -req rohan.csr 
  -CA ../minikube/ca.crt \ 
  -CAkey ../minikube/ca.key 
  -CAcreateserial \
  -out rohan.crt \
  -days 365
Örnek
Şöyle yaparız
openssl x509 \
    -req \
    -in host.csr \
    -CA self_signed.pem \
    -CAkey self_signed.key \
    -CAcreateserial \
    -out host.pem \
    -days 30 \
    -sha256


openssl req aracı İle Certificate Signing Requests (CSR) Üretmek

Giriş
Certificate Signing Requests (CSR) yaratmak içindir. CSR tiplerinden bazıları şöyle.
- PKCS #10 : Public-Key Cryptography Standards #10 CSR, RSA's CSR format.
- SPKAC : Signed Public Key and Challenge (SPKAC), Netscape's CSR format.
Bu araç PKCS#10 tipinden CSR üretir. Açıklaması şöyle.
PKCS#10 certificate request and certificate generating utility.
1. Önce elimizde bir private key olmalı
2. Bu private key "openssl req ..." ile CSR haline dönüştürülür

Seçenekler
key : private key dosyası belirtilir.
newkey
 :seçeneği ile kullanılacak algoritma belirtilir. Genellikle rsa:1024 , rsa:2048 , rsa:4096 seçilir.
nodes : Açıklaması şöyle. Private key dosyasının şifrelenmemesini sağlar.
The option -nodes is not the English word "nodes", but rather is "no DES". When given as an argument, it means OpenSSL will not encrypt the private key in a PKCS#12 file.
keyout :seçeneği ile private key dosyası belirtilir.
out : seçeneği ile CSR dosyası belirtilir.

Private Key Dosyası Zaten Varsa
Bu durumda -key ile private key dosyası belirtilir.

Örnek
Önce bir Private key yaratırız. Şöyle yaparız
$ openssl genrsa -out rohan.key 2048
Daha sonra CSR yaratmak için şöyle yaparız
$ openssl req -new -key rohan.key -out rohan.csr -sub "/CN=rohan/0=marketingweb"

$ ll
... rohan.csr
... rohan.key
Örnek
Şöyle yaparız
openssl req -new -key <private-key-file.key> -out <CSR-file.csr>
Örnek
Şöyle yaparız
openssl req -new -key <pem_file>.pem -out <out-csr-file>.pem 
  -subj "/CN=admin/O=prod/O=dev/O=uat"
Açıklaması şöyle
This would create a CSR (Certificate Signing Request) for the username admin, belonging to three groups: prod, dev and uat
Private Key Dosyası Yoksa
-key belirtilmez ve private key dosyası da üretilir.

Örnek
Şöyle yaparız
openssl req -new \
    -newkey rsa:4096 \
    -nodes \
    -keyout host.key \
    -out host.csr \
    -subj '/CN=TestHost/C=US/ST=CA/L=SF/O=Test'

8 Aralık 2022 Perşembe

ssh Local Port Forwarding - Kendi Bilgisayarımdan Bir Başka Sunucuya Erişmek İçindir

Giriş
Local Port Forwarding için ssh komutunun -L ve -N seçenekleri birlikte kullanılır. 
Söz dizimi şöyle
ssh -L <local-port>:localhost:<remote-address:remote-port> <username>@<firewall-ip>
Daha kısa söz dizimi şöyle. Burada localhost yazmaya gerek yok
ssh -L local_port:remote_address:remote_port username@sshserver
-L seçeneği
ssh tunnel açmak için kullanılır. Açıklaması şöyle
The OpenSSH client has a command line option for port forwarding, used like this:

ssh -L localport:server:serverport user@host

which will connect to host as user, and at the same time redirecting localport on the client to serverport on server
-N seçeneği
Açıklaması şöyle.
-N    Do not execute a remote command.  This is useful for just forwarding ports.
Açıklaması şöyle.
Normally, the ssh program runs a command on a remote system. For example, ssh user@server ls -l /tmp lists the content of the /tmp directory on server. When you leave the command out, as in ssh user@server, the user's shell is executed.

One of the features of OpenSSH is the creation of tunnels. The -D, -L and -R options use various techniques that allow the forwarding of network ports, also known as tunneling. By default, a tunnel created with ssh exists as long as the command executed by ssh runs on the remote server.

Often though, you are not interested in running a remote command; all you want is the tunnel. This is what the -N option is for.
Örnek
Şöyle yaparız
ssh -L 8888:destination:5432 user@remote_host
Açıklaması şöyle
This command binds port 8888 on your local machine and forwards any incoming traffic to the database server running on destination:5432 on the remote server. Now, you can access the database server on the remote machine by connecting to localhost:8888 from your local machine.

Örnek
A -> Firewall -> B  olsun. A'dan Firewall'a erişim var.

A'dan B'ye erişmek için A'da şöyle yaparız. -N seçeneğinin kullanılma sebebi sadece tunnel görevi görmek, başka bir "remote command" çalıştırmamak.
ssh -N -L 33642:remotemachine:5900 user@firewall
A makinesinde şöyle yaparız.
$ telnet localhost 33642
Örnek
Şöyle yaparız. Burada firewall adresi 172.168.65.117. Erişmek istediğimiz sunucu da firewall'un arkasında ve ismi postgres.123456789012.us-east-1.rds.amazonaws.com.
ssh -L 5432:postgres.123456789012.us-east-1.rds.amazonaws.com:5432 ec2-user@172.168.65.117
Eğer sunucu da firewall üzerinde çalışsaydı şöyle yapardık
ssh -L 6379:localhost:6379 ec2-user@172.168.65.117
Örnek
Privileged port olan 80'i 3000 portuna yönlendirmek için şöyle yaparız.  -N seçeneğinin kullanılma sebebi sadece tunnel görevi görmek, başka bir "remote command" çalıştırmamak.
sudo ssh $USERNAME@localhost -L 80:localhost:3000 -N