發表文章

[轉貼] 如何正確設定 AFNetworking 的安全連線

圖片
如何正確設定 AFNetworking 的安全連線 TL;DR 前一陣子  AFNetworking  被爆出存在安全性漏洞,它們也針對這件事情發出 聲明稿 。 簡單的說,就是建議開發者使用最新版的 AFNetworking,並且啟用安全連線。不過它們也承認這一部份的說明文件沒有寫得很齊全,所以困擾了不少開發者。 今天花了一點時間研究,順手把它記錄下來。安全相關的東西不是我的專長,所以如果有任何錯誤的地方,請留言告訴我。 取得安全憑證 1. 確認有使用安全連線 如果你跟遠端伺服器是透過 HTTP 連線,那就不是安全連線,如果是 HTTPS 那就是安全連線。 2. 準備好網站的安全憑證 接下來我們需要憑證檔(Certification file),它的副檔名是  .cer ,你可以跟你們的網站管理員詢問,通常他們都知道怎麼拿到這個檔案。 如果你的網站管理員沒有  .cer  檔,只有  .crt  檔,那你可以透過以下這行指令轉檔,要注意的是它是採用  DER  編碼格式(請自行將  myWebsite  替換成你想要的名字): openssl x509 -in myWebsite.crt -out myWebsite.cer -outform der 如果很不幸的,你的網站管理員連  .crt  檔都沒有,那你也可以使用下列這一整行指令從你們的網站取得憑證(請自行將  www.mywebsite.com  替換成你們的網址): openssl s_client -connect  www . mywebsite . com : 443  </dev/null 2>/dev/null | openssl x509 -outform DER > myWebsite.cer 現在你有一個憑證檔了。 3. 將憑證加入你的專案 將你的憑證拖拉放到 Xcode 專案底下,記得要把  Copy items if needed  跟  Add to targets  打勾。 好了,事前準備都做完,接著我們來設定 AFNetworking。 設定 AFNetworking 1. Pinning Mode AFNetworking 的安全相關設定放在  AFSecurityPolicy ,它定義了三種 SSL Pinning Mode: /* `AFSSLPinni

Xcode iOS 打電話功能

 方法一 1.這種方法,網上很多說法是,撥打完,電話。回不到原來的應用,會停留在通訊錄裡,而且是直接撥打,不彈出提示 但本人在iOS 10.3測試是,有 提示框的。也會回到原來的應用。其他版本系統沒有測試過。 喚起提示框,很略慢。     NSString *telephoneNumber=@"撥打的號碼";     NSMutableString * str=[[NSMutableString alloc] initWithFormat:@"tel:%@",telephoneNumber];     UIApplication *application = [UIApplication sharedApplication];     NSURL *URL = [NSURL URLWithString:str];     [application openURL:URL]; 方法二 這種方法,打完電話後還會回到原來的程序,也會彈出提示 但本人在iOS 10.3測試,喚起提示框,很略慢。   NSString *telephoneNumber=@"撥打的號碼";     NSMutableString * str=[[NSMutableString alloc] initWithFormat:@"tel:%@",telephoneNumber];     UIWebView * callWebview = [[UIWebView alloc] init];     [callWebview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:str]]];     [self.view addSubview:callWebview];     [callWebview release];     [str release]; 方法三 這種方法也會回去到原來的程序裡(注意這裡的telprompt),也會彈出提示 但本人在iOS 10.3測試,喚起提示框,很略慢。   NSString *telephoneNumber=@"撥打的號碼";     NSMutableString * str=[[NSMu

如何設置圓角的EditText——Android移動開發

  首先定義一個圓角xml,路徑:res/drawable/rounded_edittext.xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="10dp"> <solid android:color="#FFFFFF" /> <corners android:bottomRightRadius="15dp" android:bottomLeftRadius="15dp" android:topLeftRadius="15dp" android:topRightRadius="15dp" /> </shape>  顯示控件的xml中  <EditText android:id="@+id/edt_operator_name" style="@style/syncEditText" android:hint="@string/hint_operator_name" android:background="@drawable/rounded_edittext" android:layout_width="250dip" android:layout_height="wrap_content" android:paddingTop="10dip" android:paddingBottom="10dip" android:gravity="center_vertical" /> 其中關鍵的就是設置編輯文本控件的background屬性

Kosp-SSL相關

  //專案 package com.example.danny.toxicgpsauditapp; //以下是新增class import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.cert.X509Certificate; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; /** * Created by DannyDev on 2017/10/18. */ public class SsX509TrustManager implements X509TrustManager {     private static TrustManager[] trustManagers ;     private static final X509Certificate[] _AcceptedIssuers = new             X509Certificate[]{};     @Override     public void checkClientTrusted(java.security.cert.X509Certificate[] x509Certificates, String s) throws java.security.cert.CertificateException {         //To change body of implemented methods use File | Settings | File Templates.     }     @Override     public void checkS