Тёмный
Rajan Maheshwari
Rajan Maheshwari
Rajan Maheshwari
Подписаться
My channel focuses on learning iOS Development and consists of various iOS Tutorials in Swift and Objective C
Charles Proxy in iOS
40:54
Год назад
Codable Protocol in Swift - Part 6
7:03
4 года назад
Codable Protocol in Swift - Part 5
14:59
4 года назад
Codable Protocol in Swift - Part 1
11:21
4 года назад
Codable Protocol in Swift - Part 2
5:45
4 года назад
Codable Protocol in Swift - Part 3
6:10
4 года назад
Codable Protocol in Swift - Part 4
10:10
4 года назад
Interactive Notifications in Swift
22:34
8 лет назад
Event Handling in Swift
8:41
8 лет назад
Alcatraz tutorial in xcode iOS
18:13
8 лет назад
Gestures Tutorial in Swift Part 3
7:56
8 лет назад
Комментарии
@vijayraghav3769
@vijayraghav3769 2 дня назад
Very detailed video So helpful
@indomitabletr1834
@indomitabletr1834 12 дней назад
Wellcome
@rajanmaheshwari
@rajanmaheshwari 12 дней назад
Thank you 🙋
@krizokkusok822
@krizokkusok822 16 дней назад
Good video! Thanks man! ❤
@rajanmaheshwari
@rajanmaheshwari 12 дней назад
Glad you liked it!
@mimchu_
@mimchu_ Месяц назад
This is not possible because CHARLES' profile expired on June 28.
@rajanmaheshwari
@rajanmaheshwari Месяц назад
Hi I am unable to understand what is not possible. Also you can reset the Charles root certificate in help menu of Charles and it will be created for the next 1 year. Then you need to again install the certificate profile in device and make sure to remove the old one first.
@mimchu_
@mimchu_ Месяц назад
I am using translations, so there may be some misunderstandings. The certificate "charles proxy ca" on the ipad side had already expired. A root reset on the charles side did not change this.
@rajanmaheshwari
@rajanmaheshwari Месяц назад
@@mimchu_ hi. After a root reset in Charles, did you again deleted the certificates in iPad and then reinstalled them again and restarted Charles. This is how generally it works for me every time
@alwynyeo8354
@alwynyeo8354 Месяц назад
The series is awesome, thanks for providing such amazing content. Just wondering the ways of storing the keys, for my understanding, storing sensitive keys (hardcoded string) in the project level is not a recommended way. For production level apps that are largely scaled, what are your approaches for storing the keys?
@rajanmaheshwari
@rajanmaheshwari Месяц назад
Hi Alwyn, Thanks for checking out the videos. For this particular hardcoded string, since this is a public key and by using this we are generating the hash using the standard header algorithms of RSA or Elliptic Curve Public Key etc. So ultimately it can be generated by anyone since the key is public. If we want to keep any other thing like access tokens, we can choose Keychains. Keeping the secret key etc as hardcoded is probably the best solution. Everything else is more complicated, but not much more secure. If a hardcoded string can be reverse-engineered, other techniques can also be quickly reverse-engineered as well. Best is to keep things simple. Apple provides some level of obfuscation which is not very easy to reverse engineer. Another approach can be making some digest using the current timestamp and mixing some secret key of yours which can be validated at your server end. That digest will be different for all calls and won't be easily recognizable for an intruder. Well, this is my opinion. You can choose to add different layers of security as per your app requirements!
@sanjaygund7900
@sanjaygund7900 3 месяца назад
my is charles is not working on my android & ios device even after entering correct server & port, can you me please
@rajanmaheshwari
@rajanmaheshwari 3 месяца назад
Can you please detail what exactly is not working and what all steps you did?
@MasumChauhan-eg8dy
@MasumChauhan-eg8dy 3 месяца назад
Hi, swcutil is showing site/fmwk approval as denied for my app. Could you please help what is wrong with my AASA?
@rajanmaheshwari
@rajanmaheshwari 3 месяца назад
Hi, This has to do something with your site where you have hosted AASA. Possibilities can be anything. May be your site or the address you are accessing is private. Check your appID format. It should be object first and not array. Check you AASA is well made as per apple policies. Check you don’t have multiple AASA. One in hidden .well known directory and one outside on root. You have to debug all these things. There might be more to debug as it depends where your AASA is hosted and your server configurations etc.
@AshuTest21
@AshuTest21 3 месяца назад
When I change the IP address on my iOS device, the internet stops working at all, cant find what should be the exact wifi settings.
@rajanmaheshwari
@rajanmaheshwari 2 месяца назад
Check for allow list feature. You need to allow all by using the wild card pattern as shown in the video.
@user-wu8vd3ym5f
@user-wu8vd3ym5f 3 месяца назад
/apple-app-site-association has been deprecated, it should now be in /.well-known/apple-app-site-association
@chienpham7374
@chienpham7374 5 месяцев назад
small concern, the policy array is created but not used :D
@rajanmaheshwari
@rajanmaheshwari 4 месяца назад
Yeah, I forgot to set them which will be used in evaluation. After appending the policy array, you can use SecTrustSetPolicies(serverTrust, policy). Thanks
@mstafadev6729
@mstafadev6729 5 месяцев назад
Thank you, hou do i contact you i have a job for you
@indomitabletr1834
@indomitabletr1834 5 месяцев назад
Thank you, with these videos, i finished my project. ❤
@rahuljamba5846
@rahuljamba5846 5 месяцев назад
Again Great video am watched your video multiple times, Thanks for sharing your knowledge please be active in your YT account.
@darkcommndo9809
@darkcommndo9809 6 месяцев назад
❤❤
@adnanjawed
@adnanjawed 6 месяцев назад
what happens when a certificate expires. do we have to include a new certificate in the app bundle?
@rajanmaheshwari
@rajanmaheshwari 6 месяцев назад
For certificates- yes you need to add new one in app bundle. For public keys - no if you renew certificate
@MauricioVazquez-f7g
@MauricioVazquez-f7g 6 месяцев назад
The drag and drop certificate to the simulator saved me. I was looking for hours on why was traffic being blocked on my simulator. This solved it. Thank you!
@kondak3
@kondak3 6 месяцев назад
We received .pkcs file data from there server A, use this certificate we have to connect to server B with client authentication in macOS application. How to use this certificate without installation the keychain access.
@SerchStudio
@SerchStudio 7 месяцев назад
good work, your two explications as certificate or public key is the most simple than in all other guides. and the video version is very simple without frameworks.. except for the sha256 functions.. Good job.
@prateeksekhri
@prateeksekhri 8 месяцев назад
This series of SSL Pinning are brilliant and very precisely explained it has helped me alot in making app more secure. Thank you Rajan. I have one question which was asked me in interview :- if a certificate gets expired, so in this we need to again download those certificates from web and then publish the app on the appstore, but in a large production app how can we validate certificates at runtime without publishing the app on the appstore everytime?
@rajanmaheshwari
@rajanmaheshwari 7 месяцев назад
Hi Prateek, Thanks for checking out the videos. Generally, for large scale apps, we use public key pinning and not certificate pinning because, in public key pinning even if the certificate expires and we renew it, the public key remains the same. TrustKit also gives you a facility to add a secondary fallback public key too. Thus avoiding the need to re-publish the application on appstore. If you use certificate pinning, then you need to update your bundle with a latest valid certificate and update the app on appstore before the certificate expires.
@ranjithravi2239
@ranjithravi2239 8 месяцев назад
After a year this certificate will be expired. in that case this will fail?
@rajanmaheshwari
@rajanmaheshwari 7 месяцев назад
Hi Ranjith, Since Alamofire doesn't support Public Key Pinning, the certificate in the bundle will expire after a year. So you must republish with a new certificate before the old one expires. To avoid this, always use Public Key Pinning using URLSession or TrustKit.
@smitshah27
@smitshah27 9 месяцев назад
For TrustKit to work with AlamoFire, I have to change my whole API structure as we have used Alamofire like this Alamofire.request(URLString, method: httpMethod, parameters: parameters, encoding: JSONEncoding.default, headers: updateHeader).responseJSON So we have not used session. Can anyone help me how to set delegate of this session ?
@swapnilkawade8235
@swapnilkawade8235 10 месяцев назад
This is a really informative video! Awesome job! Keep up!
@rajanmaheshwari
@rajanmaheshwari 10 месяцев назад
Glad you liked it!
@smitshah27
@smitshah27 10 месяцев назад
Hello Rajan, Correct me if I am wrong. Public key pinning does not require certificates to be downloaded and keep it in the project. We just have to extract the public key from the host and use that key in the project.
@rajanmaheshwari
@rajanmaheshwari 10 месяцев назад
Correct. Public key pinning don’t require any certificate in app bundle. In case you are using public key pinning with Alamofire, then you need to keep in bundle because of Alamofire’s limitations. Otherwise, using URLSession or TrustKit, doesn’t require certificate in app bundle. You just need to extract the key, keep in project and match with request challenge.
@smitshah27
@smitshah27 10 месяцев назад
@@rajanmaheshwari Thank you very much. And btw excellent explanation for all the videos.
@nashtravelandlifestyle
@nashtravelandlifestyle 10 месяцев назад
Cant the attacker just get the certificate and pass it to the client? Instead of comparing data why are we not comparing public keys?
@rajanmaheshwari
@rajanmaheshwari 10 месяцев назад
Hi, First, the certificate is public and a public certificate can be used to secure either server-to-client or server-to-server communication. It can be easily extracted for any host. Whenever a request is intercepted, the certification changes. If the client passes the same certificate, it means it is a legitimate request. Second, the public key pinning doesn't even require a certificate in the bundle. The Public Key Pinning video is just next in this series. We can't mix two techniques. Both have their pros and cons. There are always risks involved and SSL Pinning is not a 100% secure mechanism.
@nashtravelandlifestyle
@nashtravelandlifestyle 10 месяцев назад
@@rajanmaheshwari understood it was confusing as the title of video didn't mention which type of pinning is explained here.
@rajanmaheshwari
@rajanmaheshwari 10 месяцев назад
@@nashtravelandlifestyle I have mentioned in the brackets (Certificate Pinning using URLSession) in the title
@nashtravelandlifestyle
@nashtravelandlifestyle 10 месяцев назад
​@@rajanmaheshwarioh my bad 👍
@ssaai
@ssaai 11 месяцев назад
Another solution is refresh token and auth token, Is it right?
@rajanmaheshwari
@rajanmaheshwari 11 месяцев назад
Hi Sai, I am not able to understand this. Even if you have refresh and auth token mechanism, the intruder can still see your tokens passed in calls. And if someone is sniffing, you might want to invalidate the call. That’s where SSL pinning comes in.
@ssaai
@ssaai 11 месяцев назад
@@rajanmaheshwari ok got it, thanks. Please make a video about auth and refresh token api calling.
@sudhakard5273
@sudhakard5273 11 месяцев назад
Super topic you have choosen, great video. Plz adderess my issue iam getting ssl pinning failed. My remoteCertData and localCertData are not matching/equal
@rajanmaheshwari
@rajanmaheshwari 11 месяцев назад
Hi Sudhakar, There may be a possibility that you might have downloaded the wrong local certificate. Please recheck. You need to download the last one (leaf one at the bottom)
@payalmalekar6529
@payalmalekar6529 11 месяцев назад
Hi Rajan, Do we need certificate to be get added in to the Application bundle if we are using Almofire with Trustkit ?
@rajanmaheshwari
@rajanmaheshwari 11 месяцев назад
No, we don't need the certificate in the app bundle if you are using TrustKit either with Alamofire or with URLSession.
@payalmalekar6529
@payalmalekar6529 11 месяцев назад
All the videos in this series are very brilliantly explained.. Thank you so much for creating such content. I was struggling a lot with SSL pinning and finally I found your videos.
@rajanmaheshwari
@rajanmaheshwari 11 месяцев назад
Glad you liked it! Thanks for watching!!
@kodedroid
@kodedroid Год назад
This helped a lot!! Thanks
@rajanmaheshwari
@rajanmaheshwari 11 месяцев назад
Glad to hear it!
@BajoMundoUnderground
@BajoMundoUnderground Год назад
so detailed and well explain keep the great work man
@rajanmaheshwari
@rajanmaheshwari Год назад
Glad you liked it!
@meerasayabu3823
@meerasayabu3823 Год назад
Wonderful series of videos. It helped me to understand more deeply. Thank you Bro.
@MrVipulLal
@MrVipulLal Год назад
Good video
@pankajchauhan4881
@pankajchauhan4881 Год назад
Hi Rajan, Need to know while using the TrustKit do we required certificate also?
@rajanmaheshwari
@rajanmaheshwari Год назад
Hi Pankaj. No, we don't need the certificate to add in the app bundle. TrustKit works on Public Key Pinning. If you are able to get the public key of your certificate from your security or backend team, you don't need certificate. Certificate is only needed to extract public key. It is not used in code anywhere.
@pankajchauhan4881
@pankajchauhan4881 Год назад
Hi Sir, Thanks for the reply need to know if the certificate from which we have extracted the Public key will be expire still our Public key will work or we need to change the again if the certificate is reissued?
@rajanmaheshwari
@rajanmaheshwari Год назад
@@pankajchauhan4881 If the certificate is expired and you renew it, the public key remains the same and doesn't change. If you buy a new certificate, the public key will change and you need to change the same in your code as well. So better to renew your expired certificate to keep the public keys same.
@PoojaSingh-nl6nj
@PoojaSingh-nl6nj Год назад
hi ​⁠ @rajanmaheshwari While going through swcutil file I’m seeing below: User approval: unspecified Site/Fmwk Approval: approved But after tapping on the link when app is not installed it takes me to AppStore page of app but I installed build from TestFlight and there was no callback into any of the app delegate methods like open url or useractivity delegate. Also is there any particular way to generate the deferred deep link for iOS. Hoping to see ur response.
@rajanmaheshwari
@rajanmaheshwari Год назад
Hi Pooja. Thanks for checking out the video. There are certain things that still require investigation. 1. What deep deferred link mechanism are you using. (Appsflyer, Firebase, Branch, or something else). How are you generating a deferred deep link? 2. If you are using Firebase, have you enabled allow pasteboard as Firebase uses that for the dynamic deep link. Sometimes firebase dynamic method is not able to parse the link as the link was not properly URL encoded. 3. Is your dynamic links working in debug mode. Like clicking on the link without the app installed. It goes to Appstore and then you install it from Xcode. Check the openUrl method and debug the same. Deep link can also fail if deferred deep link is not properly made. Let me know if you have any questions.
@vamsikanna2709
@vamsikanna2709 Год назад
Could you give that apk file, so that I can practice on it, others apps doesn't showing json data clearly to practice
@rajanmaheshwari
@rajanmaheshwari Год назад
Hi. Thanks for checking out the video. I have added the API end point in the description. Just create your API key from openweathermap site. For iOS, we have .ipa but that won't run on your device as the device requires to be added in developer portal and then attached to provisionings.
@DK_Musicverse
@DK_Musicverse Год назад
Hey Rajan thanks for the detail review. One issue i'm facing though.. im losing internet connectivity as soon as i turn the manual proxy on. When proxy off its working fine. If you could provide any solution it'll be a great help.
@rajanmaheshwari
@rajanmaheshwari Год назад
Hi. Thanks for checking out the video. I am not very sure about losing the internet. Maybe firewalls in your network are preventing proxy to use the internet. Also do check macOS proxy is unchecked. However, it won't make a difference. Try using Charles in some other network too and see if the same thing happens!
@DK_Musicverse
@DK_Musicverse Год назад
Hi Rajan, Yes I've tried switching to other network and it works fine. Also yes, MacOS proxy doesn't have any effect over it.. not sure why just that network it fails.
@amitarya4894
@amitarya4894 Год назад
thank you so much bhai, very helpful
@tinsp253
@tinsp253 Год назад
May I ask one question? My app link is running fine, except that when my App is not installed on a mobile phone, I am expecting the app link to show a bar displaying link to the App Store to install my App, but it does not happen. What could be the problem? How can I troubleshoot the problem? Thank you
@rajanmaheshwari
@rajanmaheshwari Год назад
Hi I think you are taking about banners which are shown in your website when app is not installed. Please check the apple doc where is given how to add a script to show a banner
@vignesh0177
@vignesh0177 Год назад
Best tutorial in YT
@Krutika.sonawala
@Krutika.sonawala Год назад
I have no "Session" class in Alamofire :(
@rajanmaheshwari
@rajanmaheshwari Год назад
Hey, you need to check your Alamofire version. Generally Session class was available in Alamofire version 5 and above. Below 5 it is SessionManager.
@Krutika.sonawala
@Krutika.sonawala Год назад
i have different manager classes for different modules. do i need to implement this for all the classes?
@rajanmaheshwari
@rajanmaheshwari Год назад
Hi. You have to write a Single/Generic Network Manager in a way that all your managers will be calling that single manager class. You can use base class/subclass concept too. In short, the module managers will call this Single Manager class and this class will be responsible for further validations like SSL pinning or anything else. Generally, we do have only a single Network Manager within the app and we segregate at the module level. You can implement the SSL logic in that single network manager class.
@Krutika.sonawala
@Krutika.sonawala Год назад
where are the commands you've shown?
@rajanmaheshwari
@rajanmaheshwari Год назад
Hi, the commands are in the video itself. I haven’t pasted the same in the description. Will do that shortly. However these are openssl commands which can be found online easily.
@helensudarikova2968
@helensudarikova2968 Год назад
Thanks for the detailed review!
@marcreloaded
@marcreloaded Год назад
Do you know how to use charles proxy to hack games?
@rajanmaheshwari
@rajanmaheshwari Год назад
Hack games as in? It’s just a network monitoring tool which can help you to consume or ingest wrong data. Rest all checks depend on server. I believe we cannot change the server config files using this
@NaveenKumar-y7h7y
@NaveenKumar-y7h7y Год назад
itni bakvas krvalo simple si chiz ko itna bhada chada ke dikhane se time waste krva lo bs
@azadbaljeet
@azadbaljeet Год назад
smart explanation
@nehanarang2674
@nehanarang2674 Год назад
Thank you sir for great explanation. I am getting "Certificate Pinning Completed Successfully"). but {"Success":false,"Message":"API not found","ErrorCode":404}. dont understand why this comes . Better if you could help:
@rajanmaheshwari
@rajanmaheshwari Год назад
Hi, thanks for checking out the videos. This error certainly is related to the API not working or not found and a 404 code is returned in response. Pinning part is fine and is independent of the error you received
@nehanarang2674
@nehanarang2674 Год назад
@@rajanmaheshwari : Ok. SSLPinning must be called before any api call?. suppose I have called 4 api in one view controller. then i need to pass 4 url in callanyapi method?Currently I was passing base url in sslpinning method
@rajanmaheshwari
@rajanmaheshwari Год назад
@@nehanarang2674 you don’t need to call anything. You only need to pass the domain where your apis are hosted. That’s it. And rest the url session delegate will take care. It will return error for all your api calls if pinning fails
@nehanarang2674
@nehanarang2674 Год назад
@@rajanmaheshwari :Ok. I am doing hte same. SSlPinningManager.shared.callAnyApi(urlString: BASE_URL , isCertificatePinning: false) { (response) in print(response) }. but it gives me the same error as i posted on my first comment
@rectorsquid
@rectorsquid Год назад
This looks almost identical to the source code for the existing Sequence filter function. What new insights are you providing here?
@deepakkumar-qz1ud
@deepakkumar-qz1ud Год назад
That is a helpful video for me....will implement it in my project
@lymankinney3467
@lymankinney3467 Год назад
🙄 *Promo sm*!