# Veri hedeflerine güvenli bağlantı

> AWS IoT Core, MQTT, Sparkplug B, Kafka, RabbitMQ, Redis, ClickHouse, HTTP ve SQL hedefleri için Sertifika deposundaki sertifikalarla TLS kurulumu.

Kaynak: https://proxus.io/tr/docs/connect/secure-target-connections

Bu kılavuzu tamamladığınızda veri hedefi verisini TLS ile gönderir: bağlandığı sunucuyu doğrular ve sunucu
isterse bir istemci sertifikasıyla kendini tanıtır. Bu ayarı her hedef için bir kez yaparsınız. Sertifikalar
[Sertifika deposunda](https://proxus.io/tr/docs/administer/certificates) durur; orada bir sertifikayı yenilediğinizde hedefte bir şey
değiştirmeniz gerekmez.

## Başlamadan önce

- Hedef oluşturulmuş olmalı. Nasıl oluşturulduğunu [Veri hedefleri](https://proxus.io/tr/docs/connect/outbound-targets) sayfası
  anlatır.
- **Güvenlik > Sertifika deposu** ekranını açabiliyor olmalısınız.
- Sunucunun yöneticisinin ya da bulut hizmetinin verdiği dosyalar elinizde olmalı: genellikle bir CA sertifikası,
  istemci sertifikası gerekiyorsa da sertifika ve özel anahtarı. Dosyalar PEM biçiminde (`.pem`, `.crt`, `.key`)
  ya da `.pfx` olabilir.

## Bir hedefin iki sertifikası

| Alan | Nedir | Ne zaman gerekir |
| --- | --- | --- |
| **Güvenilen sunucu sertifikası** | Sunucunun sertifikasını imzalayan CA. Hedef, sunucuyu ancak sertifikası bu CA'ya bağlanıyorsa ve girdiğiniz adresle eşleşiyorsa kabul eder. | Sunucunun sertifikası kendi CA'nızdan ya da özel bir CA'dan geliyorsa. Sertifikası herkese açık bir CA'dan gelen sunucularda boş bırakın; o zaman işletim sisteminin güvendiği kök sertifikalar kullanılır. |
| **İstemci sertifikası** | Hedefin sunucuya gösterdiği sertifika ve özel anahtarı. | Sunucu istemci sertifikası istiyorsa (karşılıklı TLS). Örneğin AWS IoT Core. |

Sertifikaları iki yoldan yerleştirebilirsiniz:

1. **Hedefin sayfasında**: **Sertifikalar** düğmesini seçin ve istemci sertifikasını, özel anahtarını ve varsa CA
   sertifikasını birlikte seçin. Proxus hangi dosyanın ne olduğunu kendisi bulur: özel anahtarla eşleşen sertifika
   istemci sertifikası olur, dosyalar arasındaki diğer sertifika da güvenilen sunucu sertifikası olur. İkisi de
   Sertifika deposuna kaydedilir ve hedef onlara bağlanır.
2. **Sertifika deposunda**: **Yükle** düğmesini seçin ve dosyaları seçin. Anahtarı olmayan bir sertifika (bir CA)
   ortak sertifika olarak kaydedilir. Ardından sertifikaları hedefte seçin:
   - **MQTT**, **AWS IoT Core** ve **SparkplugB** için **Parametreleri düzenle** düğmesini seçin ve sertifikaları
     **İstemci sertifikası** ile **Güvenilen sunucu sertifikası** alanlarından seçin.
   - Diğer türlerde hedefe `ServerCertificateThumbprint` parametresini (istemci sertifikası için ayrıca
     `CertificateThumbprint`) ekleyin. Değer, sertifikanın **Parmak izi**dir: kopyalamak için sertifikayı depoda
     açın.

Her değişiklikten sonra hedefi açın, **Denetle** düğmesini seçin, **Sınamanın çalışacağı yer** alanında veriyi
gönderecek Edge Gateway'i seçin ve **Bağlantıyı test et** düğmesini seçin. Bu test gerçek gönderimlerle aynı sertifikaları
ve aynı denetimleri kullanır.

## AWS IoT Core

AWS IoT Core her zaman `8883` portunda karşılıklı TLS kullanır: hedefe nesnenin (thing) cihaz sertifikası ve
anahtarı gerekir.

### AWS konsolunda

1. **AWS IoT Core > Manage > All devices > Things** sayfasını açın ve **Create things** düğmesini seçin. Tek bir
   nesne oluşturun, örneğin `proxus-line-1`.
2. Sertifika adımında **Auto-generate a new certificate** seçeneğini seçin.
3. Nesneye bağlanma ve yayın yapma izni veren bir politika (policy) ekleyin. İstemci kimliği nesne adıyla aynı olan
   ve `proxus_device_data` konusuna yayın yapan en küçük politika:

   ```json
   {
     "Version": "2012-10-17",
     "Statement": [
       { "Effect": "Allow", "Action": "iot:Connect",
         "Resource": "arn:aws:iot:<bölge>:<hesap>:client/proxus-line-1" },
       { "Effect": "Allow", "Action": "iot:Publish",
         "Resource": "arn:aws:iot:<bölge>:<hesap>:topic/proxus_device_data" }
     ]
   }
   ```

4. AWS'nin sunduğu üç dosyayı indirin: cihaz sertifikası (`…-certificate.pem.crt`), özel anahtar
   (`…-private.pem.key`) ve **Amazon Root CA 1** (`AmazonRootCA1.pem`). Özel anahtar yalnızca bu sayfada
   indirilebilir.
5. **Settings** sayfasını açın ve **Device data endpoint** adresini kopyalayın, örneğin
   `a1b2c3d4e5-ats.iot.eu-central-1.amazonaws.com`.

### Proxus'ta

1. AWS IoT Core hedefini açın (yoksa **AWS IoT Core** örneğini kopyalayın) ve bir kez kaydedin.
2. **Sertifikalar** düğmesini seçin ve üç dosyayı birlikte seçin. Cihaz sertifikası anahtarıyla birlikte kaydedilir
   ve **İstemci sertifikası** olur; Amazon Root CA 1 de **Güvenilen sunucu sertifikası** olur.
   Yalnızca sertifikayı ve anahtarı seçerseniz Proxus Amazon Root CA 1'i kendisi indirir. Merkez sunucunun internet
   erişimi yoksa AWS'yi işletim sisteminin güvendiği kök sertifikalar doğrular.
3. **Parametreleri düzenle** düğmesini seçin ve şunları girin:
   - **Uç nokta**: 5. adımdaki device data endpoint adresi.
   - **İstemci ID**: politikanın izin verdiği istemci kimliği, burada `proxus-line-1`.
   - **Port** `8883` ve **TLS kullan** açık (ikisi de varsayılan değerdir).
   - **Konu (topic)**: politikanın izin verdiği bir konu.

   **İstemci sertifikası** ve **Güvenilen sunucu sertifikası** zaten doludur.
4. Kaydedin, **Denetle** düğmesini seçin, **Sınamanın çalışacağı yer** alanında gönderen Edge Gateway'i seçin ve
   **Bağlantıyı test et** düğmesini seçin.

> **Not:**
Politika istemci kimliğine ya da konuya izin vermiyorsa veya sertifika etkin değilse AWS IoT Core bağlantıyı bir
neden belirtmeden kapatır. **Bağlantıyı test et** bağlanıp hemen kopuyorsa politikayı ve sertifikanın AWS
konsolunda **Active** durumda olduğunu kontrol edin.

## MQTT sunucuları (Mosquitto, EMQX, HiveMQ ve diğerleri)

1. Sunucunun TLS portunu (genellikle `8883`) ve sertifikasını kimin imzaladığını öğrenin.
2. Sunucunun sertifikası kendi CA'nızdan geliyorsa CA sertifikasını Sertifika deposuna yükleyin. Herkese açık bir
   CA'dan geliyorsa bu adımı atlayın.
3. Sunucu istemci sertifikası istiyorsa (Mosquitto'da `require_certificate true`), sunucu yöneticisinden bir
   istemci sertifikası ve anahtarı alın ve hedefte **Sertifikalar** düğmesiyle yükleyin.
4. Hedefte **Parametreleri düzenle** düğmesini seçin:
   - **MQTT sunucusu adresi**: sunucu sertifikasındaki ad. IP adresi yalnızca sertifikada geçiyorsa çalışır.
   - **MQTT sunucusu portu** `8883`, **TLS kullan** açık, **TLS sürümü** `Tls12` (sunucu destekliyorsa `Tls13`).
   - **Güvenilen sunucu sertifikası**: 2. adımdaki CA; herkese açık bir CA için boş.
   - **İstemci sertifikası**: 3. adımdaki sertifika ya da boş.
5. Kaydedin ve **Bağlantıyı test et** ile sınayın.

Başka bir Proxus Edge Gateway'inin MQTT sunucusuna veri göndermek için güvenilen sunucu sertifikası olarak
**Proxus Platform CA**'yı seçin: her Edge Gateway'in MQTT sunucusu sertifikasını o verir.

**SparkplugB** hedeflerinde aynı alanlar bulunur ve aynı şekilde çalışır.

## Kafka

Hedefe şu parametreleri ekleyin:

| Parametre | Değer |
| --- | --- |
| `BootstrapServers` | Sunucuların TLS dinleyicileri, örneğin `kafka1:9093,kafka2:9093`. |
| `SecurityProtocol` | TLS için `Ssl`, kullanıcı adı ve parolayla TLS için `SaslSsl` (`SaslMechanism`, `SaslUsername`, `SaslPassword` ile). |
| `ServerCertificateThumbprint` | Kümenin CA'sının Sertifika deposundaki parmak izi. Herkese açık bir CA için eklemeyin. |
| `CertificateThumbprint` | Küme istemci sertifikası istiyorsa istemci sertifikasının parmak izi. |

Sunucunun adı sertifikasıyla karşılaştırılır.

## RabbitMQ

| Parametre | Değer |
| --- | --- |
| `UseTls` | `true` |
| `Port` | `5671` (`UseTls` `true` olduğunda varsayılan). |
| `ServerCertificateThumbprint` | Özel bir CA kullanılıyorsa sunucunun CA'sı. |
| `CertificateThumbprint` | RabbitMQ istemci sertifikası istiyorsa (`ssl_options.fail_if_no_peer_cert`) istemci sertifikası. |

## Redis

| Parametre | Değer |
| --- | --- |
| `UseTls` | `true` |
| `Host` | Sunucu sertifikasındaki ad. |
| `Port` | Sunucunun TLS portu. Birçok sunucu TLS için `6380` kullanır; varsayılan `6379`'dur. |
| `ServerCertificateThumbprint`, `CertificateThumbprint` | RabbitMQ'daki gibi. |

## ClickHouse

`UseTls` değerini `true` yapın. Hedef bu durumda, `Port` girmediyseniz `8443` portunda HTTPS kullanır. Özel bir CA
için `ServerCertificateThumbprint`, sunucu istemci sertifikası istiyorsa `CertificateThumbprint` ekleyin.

## REST API, InfluxDB ve Splunk

`https://` ile başlayan bir adres TLS kullanır; sunucunun sertifikası bu adresle karşılaştırılır. Sertifikası
herkese açık bir CA'dan gelen sunucularda başka bir şey gerekmez. Özel bir CA için `ServerCertificateThumbprint`,
istemci sertifikası için `CertificateThumbprint` ekleyin.

Splunk'ta HTTP Event Collector adresini `https://` ile girin, örneğin `https://splunk.example.com:8088`. Eski
`UseSSL` parametresinin bir etkisi yoktur.

## PostgreSQL ve MySQL

| Parametre | Değer |
| --- | --- |
| `SslMode` | `VerifyFull` (önerilen): bağlantıyı şifreler, sunucunun sertifikasını ve adını doğrular. `VerifyCA` sertifikayı doğrular ama adı doğrulamaz. `Prefer` (PostgreSQL) ve `Preferred` (MySQL) şifreler ama sunucuyu doğrulamaz. |
| `ServerCertificateThumbprint` | `VerifyCA` ve `VerifyFull` için veritabanı sunucusunun CA'sı. |

`SslMode` girilmezse veritabanı sürücüsünün varsayılanı geçerli olur: sunucu sunuyorsa şifreler ama sunucuyu
doğrulamaz. Bu iki veritabanında istemci sertifikası desteklenmez.

## Azure IoT Hub

Bağlantı her zaman `8883` portunda TLS kullanır. Hub, işletim sisteminin güvendiği kök sertifikalarla doğrulanır;
cihaz **SharedAccessKey** ile oturum açar. Sertifika gerekmez. X.509 ile cihaz kimlik doğrulaması bu sürümde
desteklenmez.

## Sertifika deposunu kullanmayan hedefler

| Tür | TLS |
| --- | --- |
| **TDengine** | `UseTls` TLS'i açar; sunucu işletim sisteminin güvendiği kök sertifikalarla doğrulanır. |
| **SQL Server** | `Encrypt` TLS'i açar. `TrustServerCertificate` sunucu doğrulamasını atlar: yalnızca denemelerde kullanın. |
| **Azure Data Lake Gen2** | Her zaman HTTPS; işletim sisteminin güvendiği kök sertifikalarla doğrulanır. |

## Bağlantı kurulamadığında

| Gördüğünüz | Neden | Ne yapmalı |
| --- | --- | --- |
| **Bağlantıyı test et**, sertifikanın adresle eşleşmediğini söylüyor. | Hedefteki adres, sunucu sertifikasındaki adlardan biri değil. | Sertifikanın verildiği adı girin ya da adresinizi içeren bir sertifika isteyin. |
| **Bağlantıyı test et**, sertifikaya güvenilmediğini söylüyor. | Sunucunun CA'sı güvenilen sunucu sertifikası olarak seçilmemiş ve herkese açık bir CA değil. | CA'yı Sertifika deposuna yükleyin ve **Güvenilen sunucu sertifikası** olarak seçin. |
| **Sertifikalar**, özel anahtarın seçilen sertifikaların hiçbirine ait olmadığını söylüyor. | Anahtar ile sertifika farklı çiftlerden. | Bu anahtarla verilen sertifikayı seçin. |
| AWS IoT Core bağlanıp hemen kopuyor. | Politika istemci kimliğine ya da konuya izin vermiyor veya sertifika etkin değil. | [AWS IoT Core](#aws-iot-core) bölümündeki nota bakın. |
| Test merkez sunucudan çalışıyor ama Edge Gateway'den çalışmıyor. | Edge Gateway'in ağı sunucuya ulaşamıyor ya da başka bir adla ulaşıyor. | Testi veriyi gönderen Edge Gateway'den çalıştırın; güvenlik duvarını ve DNS'i kontrol edin. |

## Sonraki adımlar

- [Veri hedefleri](https://proxus.io/tr/docs/connect/outbound-targets): gönderim yöntemi, hedefi denetleme, cihazları seçme.
- [Sertifika deposu](https://proxus.io/tr/docs/administer/certificates): sertifikaları yenileme, değiştirme ve kaldırma.
- [Veri hedefleri başvurusu](https://proxus.io/tr/docs/reference/outbound-targets): her hedef türünün bütün parametreleri.
