精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

從服務器到iOS客戶端對ATS的適配

移動開發 iOS
ATS(App Transport Security)是為了提高App與服務器之間安全傳輸數據一個特性,這個特性從iOS9和OSX10.11開始出現,它默認需要滿足以下幾個條件

iOS 9系統已經出來了,而網絡方面的ATS(App Transport Security)特性可以說每個人都要經歷。而我這篇博客,就是結合我最近幾天的經歷,來談談從服務器到iOS客戶端對ATS的適配。

一、簡單談談ATS(App Transport Security)

ATS(App Transport Security)是為了提高App與服務器之間安全傳輸數據一個特性,這個特性從iOS9和OSX10.11開始出現,它默認需要滿足以下幾個條件:

服務器TLS版本至少是1.2版本

連接加密只允許幾種先進的加密

證書必須使用SHA256或者更好的哈希算法進行簽名,要么是2048位或者更長的RSA密鑰,要么就是256位或更長的ECC密鑰。

如果想了解哪幾種先進的加密是被允許的,詳情請見官方文檔App Transport Security Technote

二、搭建HTTPS服務器

搭建HTTPS服務器有兩種方式,一種是創建證書請求,然后到權威機構認證,隨之配置到服務器;另外一種是自建證書,然后配置給服務器。***種方式搭建的HTTPS服務器當然是***的了,建立網站的話,直接就會被信任,而作為移動端app的服務器時,也不需要為ATS做過多的適配。雖然說權威的機構認證都是需要錢的,但是如今也不乏存在免費的第三方認證機構;第二種方式搭建的HTTPS服務器,對于網站來說完全不可行,用戶打開時直接彈出一個警告提醒,說這是一個不受信任的網站,讓用戶是否繼續,體驗很差,而且讓用戶感覺網站不安全。對于移動端來說,在iOS9出現之前,這個沒什么問題,但是在iOS9出來之后,第二種方式是通不過ATS特性,需要將NSAllowsArbitraryLoads設置為YES才行。所以,我推薦使用***種方式搭建HTTPS服務器。

下面,咱們來說說這兩種方式都如何進行操作。

***種、使用CA機構認證的證書搭建HTTPS服務器

1、創建證書請求,并提交給CA機構認證

  1. #成私鑰 
  2. openssl genrsa -des3 -out private.key 2048 
  3. #生成服務器的私鑰,去除密鑰口令 
  4. openssl rsa -in private.key -out server.key 
  5. #生成證書請求 
  6. openssl req -new -key private.key -out server.csr 

將生成server.csr提交給CA機構,CA機構對它進行簽名之后,然后會生成簽名后的根證書和服務器證書發送給你,這個時候的證書就是CA認證之后的證書。我們這里將根證書和服務器證書分別改名為ca.crt和serve.crt。

2、配置Apache服務器

將ca.crt、server.key、server.crt上傳到阿里云服務器,使用SSH登陸進入這三個文件的目錄,執行下面命令

mkdir ssl
cp server.crt /alidata/server/httpd/conf/ssl/server.crt
cp server.key /alidata/server/httpd/conf/ssl/server.key
cp demoCA/cacert.pem /alidata/server/httpd/conf/ssl/ca.crt
cp -r ssl /alidata/server/httpd/conf/

編輯/alidata/server/httpd/conf/extra/httpd-ssl.conf文件,找到SSLCertificateFile、SSLCertificateKeyFile、SSLCACertificatePath、SSLCACertificateFile進行修改:

  1. # 指定服務器證書位置 
  2. SSLCertificateFile "/alidata/server/httpd/conf/ssl/server.crt" 
  3. # 指定服務器證書key位置 
  4. SSLCertificateKeyFile "/alidata/server/httpd/conf/ssl/server.key" 
  5. # 證書目錄 
  6. SSLCACertificatePath "/alidata/server/httpd/conf/ssl" 
  7. # 根證書位置 
  8. SSLCACertificateFile "/alidata/server/httpd/conf/ssl/ca.crt" 
  9.  
  10. 修改vhost配置vim /alidata/server/httpd/conf/vhosts/phpwind.conf 

 

  1. SSLCertificateFile /alidata/server/httpd/conf/ssl/server.crt 
  2. SSLCertificateKeyFile /alidata/server/httpd/conf/ssl/server.key 
  3. SSLCACertificatePath /alidata/server/httpd/conf/ssl 
  4. SSLCACertificateFile /alidata/server/httpd/conf/ssl/ca.crt 
  5. ServerName www.casetree.cn 
  6. DocumentRoot /alidata/www 

***,重啟Apache服務器,在瀏覽器輸入網址查看是否配置成功。我這里是個人使用,申請的是免費的證書,我申請證書的網站是沃通。

搭建的成果:https://www.casetree.cn

第二種、自建證書配置HTTPS服務器

請查看我的上一篇自建證書配置HTTPS服務器

三、使用nscurl對服務器進行檢測

搭建完HTTPS服務器之后,可以使用nscurl命令來進行檢測,查看建立的HTTPS服務器是否能通過ATS特性。

  1. nscurl --ats-diagnostics --verbose https://casetree.cn 

如果HTTPS服務器能通過ATS特性,則上面所有測試案例都是PASS;如果某一項的Reuslt是FAIL,就找到ATS Dictionary來查看,就能知道HTTPS服務器不滿足ATS哪個條件。 這里我前面碰到一個問題,就是自建證書的時候,通過此命令進行測試時,發現Result全是FAIL,而且在iOS的代碼測試中也出現了一個很奇怪的現象,就是相同的代碼,在iOS8.4請求數據完全正常,但是在iOS9上,直接是連接失敗。最終發現,其實就是因為自建證書不受信任,是通不過ATS的,除非將NSAllowsArbitraryLoads設置為YES。

四、iOS客戶端

在上面的第二大步驟當中,HTTPS服務器滿足ATS默認的條件,而且SSL證書是通過權威的CA機構認證過的,那么我們在使用Xcode7開發的時候,對網絡的適配什么都不用做,我們也能正常與服務器通信。但是,當我們對安全性有更高的要求時或者我們自建證書時,我們需要本地導入證書來進行驗證。

那么,如何本地導入證書進行驗證呢?

在這里先提一下,由于iOS客戶端支持的證書是DER格式的,我們需要創建客戶端證書。創建客戶端證書,直接將服務端的CA根證書導出成DER格式就行。
 

  1. openssl x509 -inform PEM -outform DER -in ca.crt -out ca.cer 

導入完證書之后,我們分別來說說使用NSURLSession和AFNetworking來進行本地驗證。

首先,來說說使用NSURLSession驗證

驗證步驟如下:

導入CA根證書到工程中,即我們創建的ca.cer

獲取trust object,通過SecCertificateCreateWithData方法讀取導入的證書的數據生成一個證書對象,然后通過SecTrustSetAnchorCertificates 設置這個證書為trust object的信任根證書(trusted anchor)

通過SecTrustEvaluate方法去驗證trust object

下面是主要OC實現代碼,Demo工程我也放在github上了,有OC和Swift兩種語言,下載Demo請點擊HTTPSConnectDemo。

  1. - (void)viewDidLoad { 
  2. [super viewDidLoad]; 
  3. //導入客戶端證書 
  4. NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"ca" ofType:@"cer"]; 
  5. NSData *data = [NSData dataWithContentsOfFile:cerPath]; 
  6. SecCertificateRef certificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef) data); 
  7. self.trustedCerArr = @[(__bridge_transfer id)certificate]; 
  8. //發送請求 
  9. NSURL *testURL = [NSURL URLWithString:@"https://casetree.cn/web/test/demo.php"]; 
  10. NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]]; 
  11. NSURLSessionDataTask *task = [session dataTaskWithRequest:[NSURLRequest requestWithURL:testURL]]; 
  12. [task resume]; 
  13. // Do any additional setup after loading the view, typically from a nib. 
  14.  
  15. #pragma mark - NSURLSessionDelegate 
  16. - (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge 
  17. completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * __nullable credential))completionHandler{ 
  18.  
  19. OSStatus err; 
  20. NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengePerformDefaultHandling; 
  21. SecTrustResultType trustResult = kSecTrustResultInvalid; 
  22. NSURLCredential *credential = nil; 
  23.  
  24. //獲取服務器的trust object 
  25. SecTrustRef serverTrust = challenge.protectionSpace.serverTrust; 
  26. //將讀取的證書設置為serverTrust的根證書 
  27. err = SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)self.trustedCerArr); 
  28.  
  29. if(err == noErr){ 
  30. //通過本地導入的證書來驗證服務器的證書是否可信,如果將SecTrustSetAnchorCertificatesOnly設置為NO,則只要通過本地或者系統證書鏈任何一方認證就行 
  31. err = SecTrustEvaluate(serverTrust, &trustResult); 
  32.  
  33. if (err == errSecSuccess && (trustResult == kSecTrustResultProceed || trustResult == kSecTrustResultUnspecified)){ 
  34. //認證成功,則創建一個憑證返回給服務器 
  35. disposition = NSURLSessionAuthChallengeUseCredential; 
  36. credential = [NSURLCredential credentialForTrust:serverTrust]; 
  37. else
  38. disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge; 
  39.  
  40. //回調憑證,傳遞給服務器 
  41. if(completionHandler){ 
  42. completionHandler(disposition, credential); 

注意:

1、SecTrustSetAnchorCertificates方法會設置一個標示去屏蔽trust object對其它根證書的信任;如果你也想信任系統默認的根證書,請調用SecTrustSetAnchorCertificatesOnly方法,清空這個標示(設置為NO) 2、驗證的方法不僅僅只有這一種,更多的驗證方法,請參考HTTPS Server Trust Evaluation

下面,來談談AFNetworking是如何驗證的,我們如何使用AFNetworking。

AFNetworking的證書驗證工作是由AFSecurityPolicy來完成的,所以這里我們主要來了解一下AFSecurityPolicy。注意:我這里使用的是AFNetworking2.6.0,它跟2.5.0是有區別的。

說到AFSecurityPolicy,我們必須要提到它三個重要的屬性,如下:

  1. @property (readonly, nonatomic, assign) AFSSLPinningMode SSLPinningMode; 
  2. @property (nonatomic, assign) BOOL allowInvalidCertificates; 
  3. @property (nonatomic, assign) BOOL validatesDomainName; 

SSLPingMode是最重要的屬性,它標明了AFSecurityPolicy是以何種方式來驗證。它是一個枚舉類型,這個枚舉類型有三個值,分別是AFSSLPinningModeNone、AFSSLPinningModePublicKey、AFSSLPinningModeCertificate。其中,AFSSLPinningModeNone代表了AFSecurityPolicy不做更嚴格的驗證,只要是系統信任的證書就可以通過驗證,不過,它受到allowInvalidCertificates和validatesDomainName的影響;AFSSLPinningModePublicKey是通過比較證書當中公鑰(PublicKey)部分來進行驗證,通過SecTrustCopyPublicKey方法獲取本地證書和服務器證書,然后進行比較,如果有一個相同,則通過驗證,此方式主要適用于自建證書搭建的HTTPS服務器和需要較高安全要求的驗證;AFSSLPinningModeCertificate則是直接將本地的證書設置為信任的根證書,然后來進行判斷,并且比較本地證書的內容和服務器證書內容是否相同,來進行二次判斷,此方式適用于較高安全要求的驗證。

allowInvalidCertificates屬性代表是否允許不信任的證書通過驗證,默認為NO。

validatesDomainName屬性代表是否驗證主機名,默認為YES。

接下來,我們說下驗證流程。驗證流程主要放在AFSecurityPolicy的- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust forDomain:(NSString *)domain方法當中。

c

  1. - (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust 
  2. forDomain:(NSString *)domain 
  3. //當使用自建證書驗證域名時,需要使用AFSSLPinningModePublicKey或者AFSSLPinningModeCertificate 
  4. if (domain && self.allowInvalidCertificates && self.validatesDomainName && (self.SSLPinningMode == AFSSLPinningModeNone || [self.pinnedCertificates count] == 0)) { 
  5. NSLog(@"In order to validate a domain name for self signed certificates, you MUST use pinning."); 
  6. return NO; 
  7.  
  8. NSMutableArray *policies = [NSMutableArray array]; 
  9. //需要驗證域名時,需要添加一個驗證域名的策略 
  10. if (self.validatesDomainName) { 
  11. [policies addObject:(__bridge_transfer id)SecPolicyCreateSSL(true, (__bridge CFStringRef)domain)]; 
  12. else { 
  13. [policies addObject:(__bridge_transfer id)SecPolicyCreateBasicX509()]; 
  14.  
  15. //設置驗證的策略,可以是多個 
  16. SecTrustSetPolicies(serverTrust, (__bridge CFArrayRef)policies); 
  17. //SSLPinningMode為AFSSLPinningModeNone時,allowInvalidCertificates為YES,則代表服務器任何證書都能驗證通過;如果它為NO,則需要判斷此服務器證書是否是系統信任的證書 
  18. if (self.SSLPinningMode == AFSSLPinningModeNone) { 
  19. if (self.allowInvalidCertificates || AFServerTrustIsValid(serverTrust)){ 
  20. return YES; 
  21. else { 
  22. return NO; 
  23. else if (!AFServerTrustIsValid(serverTrust) && !self.allowInvalidCertificates) { 
  24. return NO; 
  25.  
  26. //獲取服務器證書的內容 
  27. NSArray *serverCertificates = AFCertificateTrustChainForServerTrust(serverTrust); 
  28. switch (self.SSLPinningMode) { 
  29. case AFSSLPinningModeNone: 
  30. default
  31. return NO; 
  32. case AFSSLPinningModeCertificate: { 
  33. //AFSSLPinningModeCertificate是直接將本地的證書設置為信任的根證書,然后來進行判斷,并且比較本地證書的內容和服務器證書內容是否相同,如果有一個相同則返回YES 
  34.  
  35. NSMutableArray *pinnedCertificates = [NSMutableArray array]; 
  36. for (NSData *certificateData in self.pinnedCertificates) { 
  37. [pinnedCertificates addObject:(__bridge_transfer id)SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData)]; 
  38. //設置本地的證書為根證書 
  39. SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)pinnedCertificates); 
  40.  
  41. //通過本地的證書來判斷服務器證書是否可信,不可信,則驗證不通過 
  42. if (!AFServerTrustIsValid(serverTrust)) { 
  43. return NO; 
  44.  
  45. //判斷本地證書和服務器證書的內容是否相同 
  46. NSUInteger trustedCertificateCount = 0
  47. for (NSData *trustChainCertificate in serverCertificates) { 
  48. if ([self.pinnedCertificates containsObject:trustChainCertificate]) { 
  49. trustedCertificateCount++; 
  50. return trustedCertificateCount > 0
  51. case AFSSLPinningModePublicKey: { 
  52. //AFSSLPinningModePublicKey是通過比較證書當中公鑰(PublicKey)部分來進行驗證,通過SecTrustCopyPublicKey方法獲取本地證書和服務器證書,然后進行比較,如果有一個相同,則通過驗證 
  53. NSUInteger trustedPublicKeyCount = 0
  54. NSArray *publicKeys = AFPublicKeyTrustChainForServerTrust(serverTrust); 
  55. //判斷服務器證書的公鑰與本地的證書公鑰是否相同,相同則客戶端認證通過 
  56. for (id trustChainPublicKey in publicKeys) { 
  57. for (id pinnedPublicKey in self.pinnedPublicKeys) { 
  58. if (AFSecKeyIsEqualToKey((__bridge SecKeyRef)trustChainPublicKey, (__bridge SecKeyRef)pinnedPublicKey)) { 
  59. trustedPublicKeyCount += 1
  60. return trustedPublicKeyCount > 0
  61. return NO; 

說了驗證流程,我們***來看看AFNetworking怎么使用,代碼如下:

  1. _httpClient = [[BGAFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:baseURL]]; 
  2. AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; 
  3. //是否允許CA不信任的證書通過 
  4. policy.allowInvalidCertificates = YES; 
  5. //是否驗證主機名 
  6. policy.validatesDomainName = YES; 
  7. _httpClient.securityPolicy = policy; 

這里我就沒有建立Demo了,如果要看的話,可以看看我寫的一個框架BGNetwork,里面的Demo對ATS進行了適配,AFNetworking的使用放在BGNetworkConnector類里面的- (instancetype)initWithBaseURL:(NSString *)baseURL delegate:(id)delegate初始化方法中。

五、適配ATS

前面的內容講述都是滿足ATS特性的情況,但若是服務器是自建證書搭建的,或者TLS版本是1.0的話,服務器又不能輕易改動,那么我們客戶端如何適配呢? 不急,我們可以在工程中的Info.plist文件當中進行設置,主要參照下圖:

適配iOS 9之ATS

如果是自建證書,沒有經過權威機構認證的證書,那么需要將NSAllowsArbitraryLoads設置為YES才能通過。NSAllowsArbitraryLoads為YES,以前的HTTP請求也能通過。

如果是認證過的證書,那么可以通過nscurl --ats-diagnostics --verbose https://casetree.cn這樣的命令來查看服務器支持的ATS Dictionary,然后進行對應的設置。

適配的部分,也可以參照Demo1_iOS9網絡適配_ATS:改用更安全的HTTPS

責任編輯:chenqingxiang 來源: CocoaChina
相關推薦

2009-08-18 12:51:19

服務器+客戶端

2011-06-09 10:51:26

Qt 服務器 客戶端

2010-06-09 14:39:58

2014-01-17 15:23:55

Nagios

2018-12-18 10:47:37

2018-07-17 09:59:10

PythonUDP服務器

2009-09-16 16:09:41

NIS服務器客戶端NIS

2018-12-19 10:31:32

客戶端IP服務器

2009-12-25 10:47:17

DNS服務器

2019-08-28 15:19:15

PythonTCP服務器

2012-05-29 09:38:04

Linux客戶端服務器

2010-10-11 17:46:01

mysql客戶端

2018-12-20 08:50:53

TCPIP服務器

2010-08-27 10:18:24

DHCP服務

2010-10-26 13:54:45

連接Oracle服務器

2009-06-27 20:32:00

LinuxNFS客戶端

2025-06-19 02:30:00

Spring服務器MCP

2014-06-01 11:03:13

VDI零客戶端

2024-02-22 13:47:40

2010-08-27 14:43:03

DB2服務器
點贊
收藏

51CTO技術棧公眾號

亚洲乱亚洲乱妇无码| 亚洲国产欧美在线| 国产欧美 在线欧美| 99热在线观看精品| 另类在线视频| 欧美在线三级电影| 国产1区2区3区中文字幕| 深夜福利视频一区| 九一九一国产精品| 97色伦亚洲国产| 91精品少妇一区二区三区蜜桃臀| 精品伊人久久久| 欧美色综合影院| 免费拍拍拍网站| 夜级特黄日本大片_在线| 成年人午夜久久久| 91色琪琪电影亚洲精品久久| 天天干天天干天天操| 亚洲最大av| 影音先锋日韩有码| 你懂得在线视频| 精品国产亚洲一区二区三区在线| 在线视频欧美区| 2018国产在线| free性欧美hd另类精品| 国产精品视频第一区| 久精品国产欧美| 午夜老司机福利| 久久av中文字幕片| 日韩免费在线免费观看| 免费日韩一级片| 国产精品videossex久久发布| x99av成人免费| 97香蕉碰碰人妻国产欧美 | 国产主播在线一区| 日本一区二区免费电影| 在线日韩av| 欧美激情小视频| 99热精品免费| 99久久精品网| 最新国产精品亚洲| 亚洲无人区码一码二码三码的含义 | 国产精品jizz| 韩国女主播一区二区三区| 91精品国产一区二区三区香蕉| wwwwww.色| 国产精品亚洲一区二区三区在线观看| 精品久久久久久中文字幕大豆网 | 精品人妻伦九区久久aaa片| 日本一区二区免费高清| 中国人与牲禽动交精品| 91社区视频在线观看| 成人免费在线播放| 少妇av一区二区三区| 四虎成人免费影院| 日韩中文在线电影| 久久精品最新地址| 极品久久久久久| 午夜久久影院| 久久免费视频网| 免费观看一区二区三区毛片| 亚洲精品人人| 国产不卡av在线免费观看| 久久精品久久久久久久| 日本午夜精品视频在线观看| 国产精品夜间视频香蕉| 国产精品爽爽久久| 成人午夜看片网址| 精品欧美日韩在线| 人成在线免费视频| 欧美激情在线免费观看| 亚洲欧美99| 色女人在线视频| 天天综合日日夜夜精品| 黄色国产小视频| 亚洲久草在线| 亚洲国产91色在线| 一卡二卡三卡四卡| 久久国产亚洲| 欧美片一区二区三区| 可以免费看的av毛片| 石原莉奈在线亚洲二区| 国产精品福利网站| h狠狠躁死你h高h| av激情亚洲男人天堂| 日韩.欧美.亚洲| 老司机福利在线视频| 亚洲福利一二三区| 亚洲五月天综合| 免费一级欧美在线大片| 精品无人国产偷自产在线| 2017亚洲天堂| 在线观看日韩av电影| 国产精品久久二区| 成 人 黄 色 片 在线播放| 久久网这里都是精品| 亚洲第一精品区| 中文在线8资源库| 91精品视频网| 在线观看国产网站| 91精品国产成人观看| 欧美一级视频一区二区| 国产精品一区二区人人爽| 26uuu亚洲综合色欧美| 中国一级大黄大黄大色毛片| 神马久久午夜| 欧美一区中文字幕| 欧美人与性囗牲恔配| 欧美视频官网| 国产精品视频专区| 三级在线电影| 亚洲在线视频一区| 中文字幕视频三区| 久久不卡国产精品一区二区 | 精品在线视频免费| 久久精品国产网站| 免费精品视频一区二区三区| 亚洲电影视频在线| 欧美无砖专区一中文字| 国产草草浮力影院| 欧美日本一区二区高清播放视频| 国产精品久久久久免费a∨大胸| 天天操天天操天天| 亚洲乱码中文字幕| 亚洲免费av一区| av中文一区| 国产成人精品久久二区二区| 天天操天天操天天| 亚洲国产精品久久人人爱蜜臀 | 欧美成人免费高清视频| 成人午夜网址| 欧美另类暴力丝袜| 国产精品系列视频| 成人免费在线观看入口| 一道本在线免费视频| 欧美综合另类| 国产精品a久久久久久| 免费在线国产| 一本大道av一区二区在线播放| 国产高清自拍视频| 亚洲欧美久久| 久久久久久久久久久一区| 黄色激情在线播放| 亚洲国产中文字幕在线观看| 日韩精品一区二区av| gogogo免费视频观看亚洲一| 免费视频爱爱太爽了| a级日韩大片| 高清一区二区三区日本久| 亚洲免费一级片| 亚洲一二三区不卡| 国产免费一区二区三区最新6| 欧美三级第一页| 国产精品视频免费一区| 国产精品国精产品一二| 日韩av在线不卡| 中文字幕精品三级久久久| 久久天天做天天爱综合色| 国产一区亚洲二区三区| 精品99久久| 国产精品专区h在线观看| 米奇精品一区二区三区| 日韩精品一区二区三区在线播放| 精品无码人妻一区二区三| 国产成人在线视频免费播放| 欧美亚洲色图视频| 久久综合社区| 国产精品电影网| 国产一二三区在线观看| 欧美大片免费久久精品三p| 69精品久久久| 久久精品在这里| 色91精品久久久久久久久| 欧美激情性爽国产精品17p| 国产一级精品aaaaa看| 国产伦精品一区二区三区视频金莲| 在线电影欧美日韩一区二区私密| 91精品视频免费在线观看| 艳妇臀荡乳欲伦亚洲一区| 韩国无码一区二区三区精品| 青娱乐精品视频| 男人天堂新网址| 精品免费在线| 成人免费视频视频在| 欧美××××黑人××性爽| 欧美成年人网站| 牛牛澡牛牛爽一区二区| 欧美精品在线一区二区| 国产无码精品一区二区| 国产精品嫩草影院av蜜臀| 91亚洲一线产区二线产区| 日韩av网站在线观看| 成年人视频网站免费| 国产麻豆精品久久| www.成人av.com| av亚洲一区| 97视频免费在线看| 成人在线视频亚洲| 亚洲欧美制服中文字幕| 精品人妻av一区二区三区| 色婷婷亚洲综合| 国产午夜精品无码一区二区| 欧美极品xxx| aaaa黄色片| 国产综合久久久久久鬼色| 成人免费观看毛片| 狠狠综合久久| 亚洲蜜桃av| 伊人久久大香线蕉无限次| 97超级碰碰| 深夜日韩欧美| 国产精品第1页| 欧美调教sm| 久久久久久国产精品三级玉女聊斋| 男人和女人做事情在线视频网站免费观看 | 国产欧美高清视频在线| 国产精品裸体一区二区三区| 日韩制服一区| 日韩免费黄色av| 婷婷电影在线观看| 欧美激情亚洲综合一区| 美女写真理伦片在线看| 一区二区三区四区精品| 日韩av视屏| 亚洲国产精品久久久久秋霞蜜臀| 国产美女永久免费| 欧美日韩久久不卡| 国产成人精品777777| 精品国产999| 国产精品99精品| 亚洲在线视频网站| 欧美高清视频一区二区三区| 中文字幕在线不卡视频| 国产农村妇女精品一区| 国产欧美日韩精品在线| 中国黄色a级片| 99久久精品免费精品国产| 日韩综合第一页| 国产91精品精华液一区二区三区| 91欧美一区二区三区| 国产自产v一区二区三区c| 午夜不卡福利视频| 国产在线国偷精品产拍免费yy| 爱豆国产剧免费观看大全剧苏畅 | 亚洲色图第四色| 中文无字幕一区二区三区 | 亚洲久草在线视频| 91嫩草丨国产丨精品| 亚洲人成人一区二区在线观看| 国产精品视频看看| 亚洲视频免费看| 五月天丁香激情| 亚洲成av人在线观看| 国产精品二区一区二区aⅴ| 午夜久久电影网| 亚洲天堂一区在线| 日本高清免费不卡视频| 最近中文字幕av| 欧美福利电影网| 亚洲精品成人区在线观看| 亚洲福利在线播放| 青梅竹马是消防员在线| 亚洲性视频网站| 国产日产一区二区| 欧美精品videosex极品1| av手机在线观看| 国产精品ⅴa在线观看h| 人人玩人人添人人澡欧美| 91大片在线观看| 国内视频在线精品| 欧美日韩一区二区三区在线观看免 | 国内精品视频| 国产精品免费一区二区| 欧美美乳视频| eeuss中文| 激情久久久久| 冲田杏梨av在线| 国产精品一区二区三区网站| 香港三级日本三级| 中文字幕乱码日本亚洲一区二区| 欧美三根一起进三p| 粉嫩老牛aⅴ一区二区三区| 中文字幕一区二区人妻| 日韩欧美一卡二卡| 免费看男男www网站入口在线| 久久精品成人动漫| 欧美aaaaa性bbbbb小妇| 国产色视频一区| 国产精品毛片视频| 亚洲图片小说在线| 亚洲精品看片| 无尽裸体动漫2d在线观看| 97精品电影院| 欧美一区二区三区爽爽爽| 色综合久久久网| 精品人妻一区二区三区蜜桃 | 国产三级精品在线不卡| 日韩理论电影院| 日本www在线视频| 久久精品国产精品亚洲综合| 中文字幕免费高清视频| 亚洲日本中文字幕区| 亚洲天堂一区在线观看| 欧美α欧美αv大片| a中文在线播放| 欧美一区二区.| 伊人精品综合| 中日韩在线视频| 麻豆久久婷婷| 亚洲の无码国产の无码步美| 一区二区在线观看免费视频播放| 无码人妻精品一区二区三区蜜桃91| 日韩欧美视频一区| 思思99re6国产在线播放| 4k岛国日韩精品**专区| 视频在线一区| 91视频成人免费| 久国产精品韩国三级视频| av永久免费观看| 色婷婷综合久久久中文一区二区| 五月激情婷婷综合| 欧美激情a在线| 亚洲第一二区| 玖玖精品在线视频| 国产在线视频不卡二| 中字幕一区二区三区乱码| 色婷婷av一区二区三区大白胸| 人妻少妇精品无码专区| 欧美激情高清视频| 51社区在线成人免费视频| 潘金莲一级淫片aaaaaa播放1| 麻豆精品精品国产自在97香蕉| 91l九色lporny| 在线欧美日韩精品| 国产一区电影| 国产精品美女久久| 欧美男同视频网| 黄色一级大片在线观看| 久久综合色综合88| 亚洲黄色小说图片| 国产视频精品久久久| 小早川怜子影音先锋在线观看| 精品无码久久久久久久动漫| 亚洲综合不卡| 女女互磨互喷水高潮les呻吟 | 国产成人三级在线播放 | 欧美日韩大片| 欧美动漫一区二区| 天堂在线亚洲视频| 人妻少妇无码精品视频区| 欧美日韩在线播| 男女啪啪在线观看| 99精彩视频| 99亚洲一区二区| 男人舔女人下部高潮全视频 | 日产日韩在线亚洲欧美 | 福利视频免费在线观看| 国产.精品.日韩.另类.中文.在线.播放 | 日韩久久久久久久久久久| 亚洲精品日产精品乱码不卡| 亚洲精品视频网| 91干在线观看| 成人免费在线观看av| 99热这里只有精品2| 亚洲第一综合色| 久草福利在线| 成人免费看片视频| 伊人影院久久| 国产熟妇搡bbbb搡bbbb| 欧美日韩国产免费一区二区 | 国产精品一区二区在线| 亚洲美女视频| 成人h动漫精品一区| 欧美精品亚洲一区二区在线播放| www视频在线看| 九九99久久| 蜜臀av性久久久久蜜臀av麻豆| 男女羞羞免费视频| 亚洲精品一区久久久久久| 97久久精品一区二区三区的观看方式| 国产精品三级一区二区| 久久婷婷成人综合色| 国产一区二区女内射| 97精品在线观看| 欧美电影《轻佻寡妇》| 99久久久无码国产精品性波多 | 国产日韩中文在线| 激情久久一区| 日本爱爱小视频| 日韩av在线直播| 成人在线分类| 国产无套内射久久久国产| 一区二区三区在线免费播放| 欧美少妇另类| 国产高清精品一区二区| 免费成人美女在线观看.| 国产亚洲精品成人| 中日韩午夜理伦电影免费| 欧美国产不卡| 国产老头和老头xxxx×|