Overovanie podpisov a dôvera
Každé kryptografické primitívum pochádza z crypto-for-laravel; každé rozhodnutie o dôvere zostáva v tomto balíku. Purchases sám nevolá žiadnu funkciu openssl_*:
| Obchod | crypto-for-laravel zabezpečí | Purchases si ponechá |
|---|---|---|
| Stripe | HMAC-SHA256 a porovnanie v konštantnom čase | Schému hlavičky t=/v1= a toleranciu časovej pečiatky proti replayu (predvolene 300 s) |
| Apple | ES256 JWS overenie a podpis a celú X.509 matematiku — parsovanie, SHA-1 odtlačky, väzby reťazca, platnosť | Rozhodnutie o dôvere — reťazec x5c pripnutý odtlačkom na Apple WWDR intermediate a Root CA G3, každý článok podpísal ten pod ním, každý certifikát je platný, koncový a sprostredkujúci certifikát nesú značkovacie rozšírenia Apple pre podpis App Store (1.2.840.113635.100.6.11.1) a WWDR (1.2.840.113635.100.6.2.1) — a potom väzba na aplikáciu (bundle id, prostredie, Apple ID) |
| RS256 JWS assertion | OAuth2 JWT-bearer grant, scope a cache prístupového tokenu |
Výnimky kryptografie sa na hranici každého poskytovateľa prekladajú na VerificationException, takže jeden catch pokryje všetky obchody. Pripnuté odtlačky Apple dokazujú len to, že notifikáciu podpísal Apple — ten týmto reťazcom podpisuje notifikácie všetkých aplikácií —, preto purchases každú navyše viaže na vašu aplikáciu: bundle id, prostredie a v produkcii Apple ID (pozrite Apple App Store).
Platnosť certifikátov Apple
Notifikácia App Store sa odmietne, keď je ktorýkoľvek certifikát v jej reťazci x5c — koncový, sprostredkujúci alebo koreňový — mimo svojho okna notBefore..notAfter. Tolerancia posunu hodín, uplatnená na oboch koncoch okna, vyrovná hodiny servera, ktoré mierne predbiehajú alebo meškajú:
// config/purchases.php
'settings' => [
'apple' => [
// Seconds, 0–3600. Default 60. Anything outside that range is a
// misconfiguration and throws InvalidConfigurationException — a
// fat-fingered value can never silently switch the check off.
'certificate_clock_skew' => env('PURCHASES_APPLE_CERTIFICATE_CLOCK_SKEW', 60),
],
],Odmietnutie má vlastnú správu s názvom certifikátu a okamihom, keď platnosť vypršala, takže expirovaný reťazec si nikdy nepomýlite so zlým podpisom:
RoundlyConsulting\Purchases\Exceptions\VerificationException:
Apple certificate [Apple Worldwide Developer Relations Certification Authority] expired at
2026-01-01T00:00:00+00:00; the notification's certificate chain is outside its validity period.Opätovné overenie archivovaných notifikácií
Opätovné overenie archivovanej notifikácie Apple podpísanej medzičasom vymeneným, dnes už expirovaným certifikátom zlyhá — a to je správne, pretože expirovaný certifikát nič nedokazuje. certificate_clock_skew zvyšujte len kvôli posunu hodín; nie je to obdobie odkladu a jeho strop je jedna hodina. purchases:replay sa to netýka: výsledky obnovuje z auditných snapshotov, ktoré boli overené pri doručení.
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.