$30 off During Our Annual Pro Sale. View Details »

App Transport Securityとローカルネットワーキング/iOSDC Japan 2017

Noritaka Kamiya
September 16, 2017

App Transport Securityとローカルネットワーキング/iOSDC Japan 2017

https://iosdc.jp/2017/node/1443

App Transport Securityとローカルネットワーキング
Noritaka Kamiya (@nolili)
App Transport Securityが発表された時、我々は戦慄しました。ローカルネットワーク上のIoTデバイスとHTTPで通信する手段を失ってしまうのです。 ATSを無効にしちゃうのか? それでApp Storeの審査は通るのか? libcurlならいけるのでは? HTTPクライアントを自分たちで作る?
このトークは2年間にわたるApp Transport Securityとの戦い、その記録です。

Noritaka Kamiya

September 16, 2017
Tweet

More Decks by Noritaka Kamiya

Other Decks in Programming

Transcript

  1. "QQ5SBOTQPSU4FDVSJUZͱ
    ϩʔΧϧωοτϫʔΩϯά
    @iOS Developers Conference Japan 2017

    View Slide

  2. /PSJUBLB,BNJZB
    Twitter/Github @nolili
    Scrum Master & Software Engineer
    Ubiregi Inc.
    http://noli.li

    View Slide

  3. View Slide

  4. "HFOEB
    "QQ5SBOTQPSU4FDVSJUZ "54
    ͷ͓͞Β͍
    ϩʔΧϧωοτϫʔΩϯάͰͷ໰୊ͱରॲͷه࿥
    ϕετϓϥΫςΟεͱམͱ݀͠

    View Slide

  5. "QQ5SBOTQPSU4FDVSJUZ "54
    ͷ͓͞Β͍
    l"QQ5SBOTQPSU4FDVSJUZ͸σϑΥϧτͷ઀ଓཁ
    ݅Λنఆ͢ΔػೳͰ͢ɻ͜ΕʹΑΓɺ$'63-·ͨ͸
    /463-4FTTJPOͷ֤"1*ͷ࢖༻࣌ʹɺ"QQ͕࠷ྑ
    ͷํ๏Ͱ҆શͳ઀ଓΛߦ͏͜ͱ͕࣮֬ʹͳΓ·͢ɻl
    IUUQTJNBHFTBQQMFDPNKQCVTJOFTTEPDT
    J04@4FDVSJUZ@(VJEFQEG

    View Slide

  6. "QQ5SBOTQPSU4FDVSJUZ "54
    ͷ͓͞Β͍
    ηΩϡΞͳϓϩτίϧҎ֎͸࢖༻Ͱ͖ͳ͍
    ੬ऑͳ҉߸ΞϧΰϦζϜ͸࢖༻Ͱ͖ͳ͍

    View Slide

  7. "QQ5SBOTQPSU4FDVSJUZ "54
    ͷ͓͞Β͍
    ӨڹΛड͚Δ
    63-4FTTJPO $PSF'PVOEBUJPO 8FC7JFXʜ
    ӨڹΛड͚ͳ͍
    4USFBN #4%TPDLFU

    View Slide

  8. ௚໘ͨ͠໰୊
    ϩʔΧϧωοτϫʔΫ಺ʹཱ͍ͬͯΔσόΠε )551
    αʔόʔʣͱ௨৴Ͱ͖ͳ͍ʂ
    σόΠε͸CPOKPVSͰ୳ࡧ͠ɺϗετ໊Ͱ63-Λ࡞੒
    ͠ɺ)551Ͱ௨৴

    View Slide

  9. ໰୊ʹͳΔέʔε
    J1IPOFͱαʔόʢσόΠεʣ͕Ͱ઀ଓ͢Δ
    ϗετ໊ͰΞΫηε͢Δ *1ΞυϨεͳΒ0,

    )551
    4FSWFS
    -"/

    View Slide

  10. ໰୊ʹͳΒͳ͍έʔε
    J1IPOFͱαʔόʢσόΠεʣͷؒʹ8FCαʔϏε͕
    ཱ͍ͬͯΔ
    4FSWFS
    FYBNQMFDPN
    )551
    $MJFOU

    View Slide

  11. J04Ͱͷ໰୊
    ϩʔΧϧωοτϫʔΫΛྫ֎ʹ͢Δํ๏͕ͳ͔ͬͨ
    'PSVNͰૌ͑Δ͕࣮૷ؒʹ߹Θͣ
    "54Λશͯແޮʹ͢Δ/4"MMPXT"SCJUSBSZ-PBET

    View Slide

  12. ࣌͸ա͗೥ͷ88%$ ݄

    "54͕"QQ4UPSFͷཁ݅ͱͳΔ͜ͱ͕Ξφ΢ϯε
    λΠϜϦϛοτ͸೥຤
    Ͳ͏͢Δ

    View Slide

  13. Կ΋͠ͳ͍Ͱઆಘ͢ΔҊ
    "QQ3FWJFXʹૌ͑Δ
    ʮզʑͷΞϓϦ͸ϩʔΧϧͷαʔόͱ઀ଓ͢Δඞཁ͕
    ͋Δʯ

    View Slide

  14. )551ΫϥΠΞϯτΛ࡞ΔҊ
    ௿ϨΠϠʔ"1*͸"54ͷӨڹΛड͚ͳ͍
    4XJGUͰ)551ΫϥΠΞϯτΛ࡞ͬͨ

    View Slide

  15. ͢Ͱʹ͋Δ)551ΫϥΠΞϯτΛ࢖͏Ҋ
    ࣮੷ͷ͋ΔϥΠϒϥϦ͸ͳ͍͔
    MJCDVSM
    CJUDPEFΛग़ྗͰ͖ΔΑ͏ʹϏϧυ͢Δ

    ʢকདྷͷඞਢԽʹඋ͑Δʣ

    View Slide

  16. ຊ໋ͷొ৔
    /4"MMPXT-PDBM/FUXPSLJOH

    View Slide

  17. /4"MMPXT-PDBM/FUXPSLJOH
    5%-͕MPDBMͷυϝΠϯΛྫ֎ͱͯ͠ڐՄ
    J04Ҏ্Ͱ༗ޮ
    J04ͱͷڞଘΛ͢Δ৔߹
    /4"MMPXT"SCJUSBSZ-PBETͱͷซ༻͕ඞཁ
    MPDBMIPTU΋"54ͷྫ֎ͱͳΔ

    View Slide

  18. -(5.ʂ

    View Slide

  19. /4
    /FU4FSWJDF
    /FU4FSWJDFͱ"QQ5SBOTQPSU4FDVSJUZ

    View Slide

  20. /4
    /FU4FSWJDF
    /FU4FSWJDF#SPXTFS
    /FU4FSWJDFSFTPMWF
    /FU4FSWJDFIPTU/BNF

    View Slide

  21. class Browser: NSObject, NetServiceBrowserDelegate, NetServiceDelegate {
    var serviceBrowser = NetServiceBrowser()
    var services = [NetService]()
    func start() {
    serviceBrowser.delegate = self
    serviceBrowser.
    searchForServices(ofType: "_http._tcp.", inDomain: "local")
    }
    func netServiceBrowser(_ browser: NetServiceBrowser, didFind service:
    NetService, moreComing: Bool) {
    services.append(service)
    service.delegate = self
    service.resolve(withTimeout: 1.0)
    }
    func netServiceDidResolveAddress(_ sender: NetService) {
    print(sender.hostName!, sender.addresses!)
    }
    }

    View Slide

  22. class Browser: NSObject, NetServiceBrowserDelegate, NetServiceDelegate {
    var serviceBrowser = NetServiceBrowser()
    var services = [NetService]()
    func start() {
    serviceBrowser.delegate = self
    serviceBrowser.
    searchForServices(ofType: "_http._tcp.", inDomain: "local")
    }
    func netServiceBrowser(_ browser: NetServiceBrowser, didFind service:
    NetService, moreComing: Bool) {
    services.append(service)
    service.delegate = self
    service.resolve(withTimeout: 1.0)
    }
    func netServiceDidResolveAddress(_ sender: NetService) {
    print(sender.hostName!, sender.addresses!)
    }
    }
    NZEFWJDFMPDBM

    View Slide

  23. /4
    /FU4FSWJDF
    IPTU/BNFͷ຤ඌʹSPPUΛ͕ࣔͭ͘͢
    ͕͍͍ͭͯΔ63-ͱ͸௨৴ෆՄ
    ྫNZEFWJDFMPDBM

    View Slide

  24. ϕετϓϥΫςΟε
    J04Λαϙʔτ͢Δ৔߹
    NSAppTransportSecurity

    NSAllowsArbitraryLoads

    NSAllowsLocalNetworking


    View Slide

  25. ϩʔΧϧωοτϫʔΩϯάΛΑΓ҆શʹ͢ΔͨΊʹ
    ূ໌ॻͷద੾ͳ؅ཧΛߦ͍ɺηΩϡΞͳ઀ଓΛݕ౼͢Δ
    ࣗݾॺ໊ূ໌ॻΛൃߦͰ͖Δػث΋ొ৔͍ͯ͠Δ

    View Slide

  26. View Slide

  27. Ԇظ
    "54͕"QQ4UPSFͷཁ݅ͱͳΔ͜ͱ͕Ξφ΢ϯε
    Ԇظʢ࣍ͷλΠϜϦϛοτ͸ະఆʣ
    ౰໘͸/4"MMPXT"SCJUSBSZ-PBET͕ڐ͞ΕΔ

    View Slide

  28. 88%$ͷָ͠Έํ
    8IBU`TOFXJOTFDVSJUZʢඞݟʣ
    1SJWBDZBOE:PVS"QQT
    ϥϘͰࠔ͍ͬͯΔ͜ͱΛ૬ஊ͢Δ

    View Slide

  29. 3FMBUFE4FTTJPO

    View Slide

  30. ࢀߟจݙͳͲ
    *OGPSNBUJPO1SPQFSUZ-JTU,FZ3FGFSFODF
    IUUQTEFWFMPQFSBQQMFDPNMJCSBSZDPOUFOUEPDVNFOUBUJPO(FOFSBM3FGFSFODF
    *OGP1MJTU,FZ3FGFSFODF"SUJDMFT$PDPB,FZTIUNM
    "QQ5SBOTQPSU4FDVSJUZBOEMPDBMOFUXPSLJOH
    IUUQTGPSVNTEFWFMPQFSBQQMFDPNUISFBE
    #POKPVS0WFS7JFX
    IUUQTEFWFMPQFSBQQMFDPNMJCSBSZDPOUFOUEPDVNFOUBUJPO$PDPB$PODFQUVBM
    /FU4FSWJDFT"SUJDMFTEPNBJOOBNFTIUNMBQQMF@SFGEPDVJE5148

    View Slide

  31. "QQ5SBOTQPSU4FDVSJUZͱ
    ϩʔΧϧωοτϫʔΩϯά
    @iOS Developers Conference Japan 2017

    View Slide