
# Bağlantıya IdP imza sertifikası ekle

`POST /v1/connections/{connection_id}/certificates` · izin `connections:write`

Kurumsal SAML bağlantısına kimlik sağlayıcının bir imza sertifikasını ekler. Sertifikayı elle yüklemek ya da sertifika rotasyonu için kullanın: önce yeni sertifikayı ekleyin, kimlik sağlayıcıyı yeni sertifikaya geçirin, sonra eskisini [silin](delete.md). Rotasyon etkin bağlantıda da hemen uygulanır.

Sertifika tek bir PEM `CERTIFICATE` bloğudur (en çok 8 KiB). Süresi dolmamış olmalı ve en az 2048 bitlik RSA ya da ECDSA P-256, P-384 veya P-521 anahtarı taşımalıdır. Reddedilirse yanıt nedenini söylemez; ne neden ne de sertifikanın içeriği loglanır. Bir bağlantının en çok 3 etkin sertifikası olur. Bağlantıdan silinmiş bir sertifika yeniden eklenemez. İstek `If-Match` başlığı almaz. Yazma audit'e `connection.idp_certificate_added` olarak geçer.

## İstek

| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
| `connection_id` | yol | evet | Kurumsal SAML bağlantı kimliği (`conn_…`). |
| `certificate` | string | evet | Tek PEM sertifika (`-----BEGIN CERTIFICATE-----` …), en çok 8 KiB. |

## Yanıt

Yeni sertifikayla `201 Created` (bkz. [Sertifikaları listele](list.md)). Aynı sertifika bağlantıda zaten varsa yanıt kayıtlı sertifikayla `200 OK`'dir; hiçbir şey yazılmaz ve audit'e geçmez.

```json
{"id": "conncert_01j9xq2m4n6p8r0s2t4v6w8y0a", "sha256_fingerprint": "3b0c…", "not_before": "2026-01-01T00:00:00Z", "not_after": "2028-01-01T00:00:00Z", "source": "manual"}
```

## Hatalar

| HTTP | code | Ne zaman |
|---|---|---|
| 404 | `not_found` | Bağlantı bu ortamda yok ya da kurumsal bağlantı değil. |
| 409 | `conflict` | Bağlantı SAML bağlantısı değil, henüz SAML yapılandırması yok, zaten 3 etkin sertifikası var ya da sertifika daha önce bu bağlantıdan silindi. |
| 422 | `validation_failed` | Sertifika eksik, çok büyük ya da kabul edilmedi; `errors[]` `/certificate` alanını gösterir. Staging ve production ortamları [yerel sahte sunucunun](/docs/cli/mock-server) herkese açık test anahtarını taşıyan sertifikayı da reddeder. |
| 400 | `unknown_field` | Gövdede bilinmeyen bir alan var. |
| 401 | `unauthenticated` | Kimlik bilgisi yok, geçersiz ya da iptal edilmiş. |
| 403 | `insufficient_permissions` | Kimlik bilgisinde gerekli izin yok. |
| 429 | `rate_limited` | Hız sınırı aşıldı; `Retry-After` süresinden sonra yeniden deneyin. |
| 503 | `service_unavailable` | Bir bağımlılık geçici olarak kullanılamıyor; `Retry-After` süresinden sonra yeniden deneyin. |

## Örnek

```bash
jq -Rs '{certificate: .}' idp-signing.pem > cert.json
curl -X POST "https://api.eu.keenauth.com/v1/connections/conn_01j9xp6q0r1s5t7v9w1x3y5z7b/certificates" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d @cert.json
```

```bash
keenauth connections certificates add conn_01j9xp6q0r1s5t7v9w1x3y5z7b --certificate-file idp-signing.pem
```
