I would not suggest making this synchronous. You invariably want to keep your network requests asynchronous.
The simple solution is to employ your completion block property. Simply put other tasks that are dependent upon your initial SSL request inside the completion block of the first request. That way, they won't start until the first completes.
The more elegant solution is to take this a step further, and wrap your SSL request in a concurrent NSOperation
subclass. That way, you can employ not only the above completion block pattern, but you can use the addDependency
of subsequent operations and maxConcurrentOperationCount
of the NSOperationQueue
to really refine the dynamics between various operations. This is non-trivial, but you can see AFNetworking for an example of a relatively well thought-out implementation of this pattern.