🚀 Dijital dönüşümünüze bugün başlayın! İlk 3 imza ücretsiz - Hemen deneyin!

imzala.org Artık AKIS / AYYILDIZ USB Token ile Nitelikli E-İmza (NES/QES) Destekliyor — Java Gerektirmez

imzala.org Artık AKIS / AYYILDIZ USB Token ile Nitelikli E-İmza (NES/QES) Destekliyor — Java Gerektirmez

12 Mayıs 2026’da imzala.org platformuna Nitelikli Elektronik İmza (NES / QES) desteği geldi. Kullanıcılar artık kendi USB token’larıyla — başta AKIS / AYYILDIZ olmak üzere diğer Türk ESHS donanımlarıyla — Java kurulumu gerekmeden, native bir masaüstü köprüsü üzerinden 5070 sayılı Kanun ve eIDAS uyumlu PAdES B-LTA imza atabiliyor. Helper bileşeni şu an test ortamında uçtan uca çalışır durumda; prod dağıtımı ve farklı vendor donanımlarının doğrulama testleri devam ediyor.

Bu yazıda neyi başardığımızı, mimari kararları, vendor destek matrisini, kullanım akışını ve sırada ne olduğunu anlatıyoruz.

Neyi Başardık

Üç ana taş:

  1. Java sıfır, .NET sıfır, native Rust helper. Türkiye’deki yaygın QES çözümleri tarihsel olarak Java applet’lerine, sonra Java JRE’li masaüstü uygulamalarına dayandı. Biz farklı bir yaklaşım seçtik: Tauri 2.x + Rust ile yazılmış, ~15 MB boyutunda, kullanıcı cihazında lokal çalışan bir masaüstü köprüsü. Browser SDK ile wss://127.0.0.1:8765 üzerinden TLS self-signed WebSocket bağlantısıyla konuşur.

  2. Apple PCSC bug #19374107’ye katmanlı çözüm. Yosemite 2014’ten beri açık olan, Apple tarafından bir türlü kapatılmayan kritik bir smartcard altyapı hatası vardır. Kritik PKCS#11 çağrılarını (C_Login, C_Sign) bundled, code-signed, com.apple.security.smartcard entitlement’lı bir sign-worker subprocess’ine taşıdık. Tüm PKCS#11 çağrıları helper içinde tek bir std::thread’de serialize ediliyor. api.prevent_exit() ile Tauri’nin “son pencere kapanınca uygulama çıkar” varsayılan davranışını override ettik. Sonuç: macOS Apple Silicon’da uçtan uca çalışan native QES akışı.

  3. 5070 + eIDAS dual-mode imza. Aynı USB token ile hem AB (eIDAS evrensel) hem TR (BTK Profil Rehberi P3 OID) modunda imza atabiliyoruz. AYYILDIZ NES Token ile POC kanıtlandı: AB sig1 id-smime-aa-ets-sigPolicyId count=0, TR sig1 count=2 + 5070 marker OID 2.16.792.1.61.0.1.5070.3.2.1 + 32 byte zero-hash. Backend QES_SIGNATURE_POLICY_OID config ile mod seçilir.

Mimari (Teknik Müşterilere)

Browser (qes-signer.js)
  ↓ WebSocket wss://127.0.0.1:8765 (TLS self-signed, Origin check)
Tauri Helper (Rust, parent process)
  ↓ mpsc channel
PKCS#11 Worker Thread (helper içinde tek std::thread)
  ↓ fork + exec
sign-worker subprocess (code-signed, smartcard entitlement)
  ↓ libakisp11.dylib (PKCS#11 driver)
USB Token (AKIS v2.0 HW 120.144 / FW 1.86)

Browser → Tauri helper → worker thread → sign-worker subprocess → PKCS#11 driver → USB token. Her katman tek bir görevden sorumlu; kritik PIN ve özel anahtar yalnızca subprocess’in stdin pipe’ında ve token üzerinde bulunur.

Backend tarafında:

  • imzala-qes-service — Java DSS engine (BouncyCastle), CMS yapı birleştirme, PAdES B-T → B-LT → B-LTA upgrade chain, RFC 3161 zaman damgası
  • imzala-service — Prisma audit modeli (QesSigningEvent), Redis 5 dakika session cache (GETDEL atomic, replay koruma), PadesLtUpgradeWorker BullMQ (24 saat sonra B-LT/B-LTA upgrade)
  • zamane-service — TÜBİTAK KAMU SM TSA forwarder (/rfc3161 endpoint, DSS uyumlu)

Güvenlik Mimarisi

USB token PIN’i:

  • Browser’a, network’e, log’a, parent helper bellek’ine ASLA dokunmaz. Yalnızca sign-worker subprocess’inin stdin pipe’ında yer alır.
  • Subprocess imza dönüşünden hemen sonra exit eder; OS PIN’i içeren bellek sayfalarını geri alır.
  • Rust kaynak kodda zeroize crate ile PIN buffer’ları bellekten silinir.
  • Audit log: imza zamanı, sertifika SHA-256 thumbprint, başarı/başarısızlık. PIN içeriği veya özel anahtar değeri kayıt edilmez.

WebSocket güvenliği:

  • TLS self-signed (rcgen ile lokal CA üretilir, tarayıcıya bir kez kabul ettirilir)
  • Origin header kontrolü (yalnızca tanımlı imzala.org domain’lerinden gelen istekler kabul edilir)
  • UUID korelasyon ID’leri ile cross-tab replay koruması

Vendor Destek Matrisi

PKCS#11 standardına bağlı çalıştığımız için teorik olarak tüm Türk ESHS donanımlarını destekleyebiliriz. Pratikte her vendor’ın PKCS#11 driver’ında ufak farklılıklar olduğu için her birini ayrı ayrı smoke test etmemiz gerekiyor.

ESHS / ÜreticiDonanımDurum
TÜBİTAK UEKAE / AKISAYYILDIZ NES Token (AKIS v2.0 HW 120.144 / FW 1.86)✓ Smoke test geçti — 12 May 2026
E-TuğraUSB Token⏳ Donanım kargo bekleniyor
TÜRKTRUSTArnica USB Token⏳ Donanım kargo bekleniyor
E-GüvenUSB Token⏳ Donanım tedariki
Kamu SMNES Kart + okuyucu⏳ Donanım tedariki + kurum müşteri akışı
ArkimzaBLE mobile⏳ Mobile sprint kapsamında

Her smoke test sonucu ESHS uyum belgesine işliyoruz. Önce AB modunda evrensel kabul gerekenleri (AKIS, E-Tuğra) işleme alıyoruz; sonra TR-only modlar.

Kullanım Akışı

Müşteri perspektifinden 3 adım:

  1. Helper’ı bir kez indir. macOS .dmg / Windows .msi / Linux .deb-.rpm. Şu an dev kalitesinde build’lerimiz var; prod kalitesinde Apple Developer ID notarization + Windows Authenticode imzalama adımları planlanıyor. Beta erişim için bekleme listemize katılabilirsiniz.

  2. PKCS#11 sürücüsü kurulu mu kontrol et. Çoğu kullanıcı için ESHS’sinden USB token aldığında zaten yüklemiş olduğu adım (Adobe Acrobat ile imzalayanlar dahildir). Helper otomatik tespit yapar; eksikse hangi linkten indireceğinizi söyler.

  3. Dashboard’dan imza akışı. Sözleşmeye girip imza ekranına ulaştığınızda, sertifika seçim dialog’u çıkar; sertifikayı seç; OS PIN dialog’u açılır; PIN’i gir; 5-8 saniyede PAdES B-T imzalı PDF’iniz hazır. 24 saat sonra arka plan worker’ı B-LT / B-LTA upgrade yapar.

Hukuki Çerçeve

Türkiye: 5070 sayılı Kanun m.5/1 — “Güvenli elektronik imza, elle atılan imza ile aynı hukuki sonucu doğurur.” HMK m.205/2 — güvenli elektronik imzalı veriler senet hükmündedir. İmzala.org ESHS değildir; sertifikayı kullanıcı yetkili bir ESHS’den (TÜBİTAK KAMU SM, E-Tuğra, TürkTrust, E-Güven, KamuSM) alır; biz sadece imza akışı + saklama + PAdES uzun-vade arşiv katmanını sağlarız.

AB: eIDAS Reg. 910/2014 Art.25(2) — “Bir nitelikli elektronik imza, el yazısı imzanın hukuki sonuçlarına eşdeğer hukuki etkiye sahiptir.” Türkiye AB EU Trusted List’te yer almadığı için sınır ötesi karşılıklı tanıma garantisi yoktur; AB tarafına imza atılan sözleşmelerde karşı tarafın hukuk müşaviriyle teyit alınması gerekir. Detaylı: Kullanım Koşulları § 18.

Detaylı teknik beyanname: eIDAS QES Native Helper Uyum Beyanı. Mevcut SES akışı için karşılaştırma: SES vs QES rehberi.

Açık Kaynaktan Miras

Helper mimarisi Estonya Web-eID, AusweisApp ve OpenSC topluluğunun açık kaynak öğretilerinden ilham alıyor. Apple PCSC altyapısının yıllardır bilinen bir kısıtlamasını process isolation + dedicated thread + entitlement + sign-worker exit-on-finish kombinasyonuyla aştık. Bu birleştirme bilgisinin prod kaliteli bir entegrasyon olarak Türk dijital imza ekosistemine katkımız olduğunu düşünüyoruz; helper’ın source code’unun aşamalı olarak public’leştirilmesi yol haritamızdadır.

Sırada Ne Var

  • Faz C UI: /imza ekranında NES toggle + qes-signer.js mount (yakında)
  • Diğer ESHS vendorları: E-Tuğra, TürkTrust, E-Güven, KamuSM, Arkimza için uçtan uca doğrulama (donanımlar geldikçe)
  • Installer dağıtımı: Apple Developer ID + Windows Authenticode + .deb/.rpm
  • Mobile imza: BLE / NFC tabanlı QES (ayrı sprint)
  • EU QTSA fallback: EU müşteri çıktığında paralı kontrat (config knob’ları hazır)
  • 24 saat B-LT / B-LTA worker: Prod’da otomatik upgrade (test’te canlı)

SSS

Java yüklemem gerekecek mi? Hayır — helper saf Rust, Java JRE gerekmez. Hatta JRE olsa bile kullanmaz.

USB token sürücüsünü kim kurar? ESHS’nizden kart aldığınızda kendisi yönlendirir (Adobe Acrobat ile imzalayanlar zaten yapmış olur). Helper otomatik tespit eder; eksikse hangi linkten indireceğinizi söyler.

Adobe Acrobat ile farkı ne? Adobe da PKCS#11 kullanıyor, doğru. Bizim ek değerimiz: (1) imza akışı tarayıcıda, (2) PAdES B-T → B-LT → B-LTA 24 saatlik arşiv-uzun-vade worker’ı backend’de otomatik çalışır, (3) macOS Apple Silicon native arm64 build yolundayız (Adobe Mac’te yine x86_64).

Hangi yasal değere sahip? Türkiye’de 5070 m.5/1 uyarınca ıslak imzaya eşdeğer. AB’de eIDAS Art.25 uyarınca QES olarak tanınır — ancak Türkiye AB LOTL’da olmadığı için karşılıklı tanıma garantisi yoktur. Bkz. Kullanım Koşulları § 18.

Güvenli mi? Evet. PIN browser’a, network’e, log’a, parent helper bellek’ine dokunmadan, izole bir subprocess’te doğrudan USB token’a iletilir. Subprocess imzayı dönerken hemen exit eder. Detaylı güvenlik mimarisi: /guvenlik sayfasındaki “Nitelikli E-İmza için Native Donanım Köprüsü” bölümü.

Şu an ben de kullanabilir miyim? Helper bileşeni test ortamında uçtan uca çalışır durumda; prod dağıtımı (code-signed installer’lar + Faz C UI) henüz son adımda. Beta erişim için [email protected] üzerinden bekleme listesine katılabilirsiniz.

Mobile imza? Sıradaki sprint. BLE / NFC tabanlı bir mobile QES çözümü (Arkimza modeli) ayrı bir yol haritası kalemidir.


İlgili sayfalar:

Demo Talep Et

15 dakikalık ücretsiz demo ile imzala.org'un kurumunuza nasıl uyduğunu birlikte görelim.

E-posta veya telefondan en az birini doldurun.