精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美精品一级| 男女羞羞在线观看| 国产做a爰片久久毛片| 欧美精品中文字幕一区| 色欲无码人妻久久精品| 毛片大全在线观看| 久久久精品国产免大香伊| 国产日韩av在线播放| 中文字幕在线观看成人| 视频一区在线| 日韩欧美在线视频| 五月天亚洲综合小说网| av免费观看在线| 亚洲青色在线| 自拍视频国产精品| 免费看91视频| 日本综合字幕| 国产精品国产馆在线真实露脸| 91免费视频网站| 国产精品7777777| 日韩电影一区| 亚洲国产精品va在看黑人| 日av中文字幕| 中文字幕中文字幕在线十八区| 97aⅴ精品视频一二三区| 久久成人免费日本黄色| 少妇高潮久久久久久潘金莲| 国产清纯白嫩初高中在线观看性色| 午夜影院免费在线| 91麻豆精品在线观看| 国产精品稀缺呦系列在线| 激情五月少妇a| 免费一区二区| 精品毛片乱码1区2区3区| 无需播放器的av| sm性调教片在线观看| 中文字幕电影一区| 九九九九精品| 国产高清在线免费| 日日骚欧美日韩| 欧美激情一级二级| 国产精品酒店视频| 久久99高清| 亚洲精品在线免费观看视频| 天堂av手机在线| 最新欧美电影| 天天综合日日夜夜精品| 影音先锋成人资源网站| av大片在线看| 久久精品视频一区二区| 国产伦精品一区二区三区视频黑人 | 欧美另类z0zx974| 麻豆国产欧美一区二区三区r| 欧美一区二区日韩| 亚洲天堂网2018| 日韩电影av| 狠狠做深爱婷婷久久综合一区| av动漫在线免费观看| 毛片av在线| 国产精品久久久久aaaa| 日本午夜精品一区二区三区| 日韩精品一二| 99re热这里只有精品视频| 成人在线激情视频| 97视频免费在线| 91社区在线观看| 久久超碰97人人做人人爱| 国产成人精品一区二区在线 | 色素色在线综合| 成年人视频观看| 亚洲精品动漫| 狠狠综合久久av一区二区小说| 日本欧美黄色片| 天堂网在线最新版www中文网| 精品久久久精品| 欧美日韩在线中文| 欧美xo影院| 欧美日韩亚洲一区二| 青青青免费在线| 小h片在线观看| 欧美日韩一区二区三区高清 | 亚洲综合av一区二区三区| 在线视频你懂得一区二区三区| 天天插天天操天天射| 日本精品久久| 欧美videofree性高清杂交| 久久无码专区国产精品s| 精品精品国产毛片在线看| 精品亚洲aⅴ在线观看| 精品人伦一区二区| 91一区在线| 欧美韩国理论所午夜片917电影| 国产大片中文字幕| 久久国产主播| 91精品国产自产在线老师啪| 亚洲国产中文字幕在线| www欧美成人18+| 日韩女优中文字幕| 国产淫片在线观看| 午夜成人在线视频| 国产wwwxx| 亚洲天堂中文字幕在线观看| 亚洲精品国精品久久99热 | 亚洲青青一区| 日韩精品一区二区三区四区视频| 偷拍夫妻性生活| 精品国产乱码久久久久久果冻传媒 | 性欧美8khd高清极品| 成人av在线资源网站| 欧美精品在线一区| 最新日本在线观看| 婷婷激情综合网| 精品亚洲一区二区三区四区| 综合成人在线| 永久免费毛片在线播放不卡| 久久成人国产精品入口| 蜜桃视频一区| 亚洲一区二区日本| 免费在线视频一级不卡| 1000部国产精品成人观看| 亚洲日本无吗高清不卡| www在线观看黄色| 欧美人牲a欧美精品| 亚洲天堂资源在线| 亚洲欧洲美洲一区二区三区| 日本老师69xxx| 国产精品久久久久久69| 久久亚洲影视婷婷| 日b视频免费观看| 四虎永久精品在线| 亚洲男人的天堂在线播放| 亚洲国产精品久| 免费国产亚洲视频| 欧美裸体网站| sm久久捆绑调教精品一区| 91精品国产综合久久久久久久| av漫画在线观看| 色97色成人| 久久久久久久久国产精品| 五月婷婷激情五月| 97精品超碰一区二区三区| 国产美女视频免费| 美女一区网站| 亚洲精品suv精品一区二区| 国产女片a归国片aa| 理论片日本一区| 日韩精品久久久毛片一区二区| av最新在线| 日韩精品一区二区三区三区免费| 一区二区国产精品精华液| 秋霞午夜av一区二区三区| 裸模一区二区三区免费| 免费欧美一级片| 风间由美中文字幕在线看视频国产欧美| 一区二区三区回区在观看免费视频| 亚洲日本视频在线观看| 91在线播放网址| 久久久国内精品| 欧美少妇激情| 久久精品国产亚洲7777| 一级黄色片在线看| 国产精品成人在线观看| www.精品在线| 99热国内精品| 91天堂在线视频| 伊人手机在线| 精品国产一区二区三区不卡| 青青草手机视频在线观看| 国产精品一区二区在线观看网站| 久久久无码中文字幕久...| 成人av在线播放| 欧美精品一区二区免费| 亚洲AV无码国产精品午夜字幕| 一区二区三区色| 星空大象在线观看免费播放| 国产亚洲一区在线| 蜜桃传媒视频第一区入口在线看| 韩漫成人漫画| 最近2019中文字幕mv免费看 | wwwww在线观看| 黄色亚洲免费| 国产一区二区三区奇米久涩 | 一区二区三区**美女毛片| jjzz黄色片| 久久青草久久| 在线码字幕一区| 亚洲一区 二区| 57pao精品| av二区在线| 日韩一级大片在线观看| 日韩av一区二区在线播放| 久久综合中文字幕| 2025韩国理伦片在线观看| 久久精品亚洲欧美日韩精品中文字幕| 99国产视频在线| 色豆豆成人网| 欧美精品999| 免费在线毛片| 91精品国产综合久久精品app| 国产成人无码精品亚洲| 香蕉视频网站在线| 精品欧美一区二区三区| 久久爱一区二区| 久久嫩草精品久久久精品一| 欧美三级午夜理伦三级富婆| 欧美第一精品| 国产区欧美区日韩区| 深夜日韩欧美| 欧美在线一区二区视频| 色婷婷在线播放| 亚洲精品一区在线观看| 中国一级片黄色一级片黄| 国产精品丝袜91| 日韩精品人妻中文字幕有码| 免费xxxx性欧美18vr| 男人用嘴添女人下身免费视频| 久久一本综合| 欧美另类网站| 林ゆな中文字幕一区二区| 91视频国产高清| 日本精品久久| 欧美一二三视频| av黄色在线| 中文字幕精品一区二区精品| 色一情一乱一乱一区91av| 欧美日韩国产电影| 日本中文在线播放| 亚洲乱码国产乱码精品精的特点 | 日韩在线小视频| 日本电影一区二区在线观看| 欧美成人乱码一区二区三区| 亚洲视频在线观看一区二区| 色综合视频在线观看| 久草视频在线资源| 国产香蕉久久精品综合网| 最新免费av网址| 麻豆91在线播放| 日本女优爱爱视频| 99在线|亚洲一区二区| 宅男噜噜99国产精品观看免费| 影视先锋久久| 欧美一级电影在线| 成人在线app| 亚洲欧美日韩中文在线| 完全免费av在线播放| 中文字字幕码一二三区| 成人黄色在线视频| 无码人妻丰满熟妇啪啪网站| 国产精品99久久久久久似苏梦涵 | 国产一区三区三区| 男女啪啪网站视频| 日韩成人一级片| 日本va中文字幕| 久久九九精品| 凹凸日日摸日日碰夜夜爽1| 国产精品一二| 国产a级一级片| 国产精品日韩| 国产免费成人在线| 亚洲一区视频| aaa毛片在线观看| 久久久久久黄| 男人的天堂日韩| 亚洲免费婷婷| 欧美一区二区中文字幕| 国产乱码精品| 日韩中文字幕在线视频观看 | 99999精品视频| 午夜日韩在线| 成人免费观看在线| 国产亚洲午夜| 青青青在线视频免费观看| 免费成人小视频| 在线观看视频你懂得| 国产成人啪免费观看软件| 91超薄肉色丝袜交足高跟凉鞋| www.爱久久.com| 黑人巨大精品欧美| 国产日韩成人精品| 日韩一级片大全| 亚洲综合色丁香婷婷六月图片| 国产在线视频你懂的| 欧美日韩亚洲网| 中文字幕乱伦视频| 91麻豆精品国产91久久久资源速度 | 天天色综合久久| 亚洲男人天堂2024| 日本不卡三区| 久久久久久久香蕉网| 亚洲私拍视频| 国产九九精品视频| 亚洲综合网站| 牛人盗摄一区二区三区视频| 欧美日韩一区二区三区视频播放| 国产一区一区三区| 91久久亚洲| 性欧美videossex精品| 国产精品一区二区久激情瑜伽 | 88久久精品| 欧美日韩三区四区| 久久久久久久久丰满| 久久久久久综合网天天| 中文字幕永久在线观看| 制服丝袜av成人在线看| 国模无码一区二区三区| 亚洲美女www午夜| 久cao在线| 欧美做受高潮电影o| 高清在线一区二区| 欧美国产一区二区在线| 亚洲mv大片欧洲mv大片| 国产精品视频一区二区三区四区五区| 麻豆一区二区在线| 国产精品一级黄片| 亚洲美女屁股眼交| 国产精品51麻豆cm传媒| 日韩一级大片在线观看| 懂色av一区二区三区四区| 最好看的2019的中文字幕视频| 爱草tv视频在线观看992| 91精品久久久久久久久青青| 日韩美女精品| 欧美大黑帍在线播放| 精品在线亚洲视频| 国产美女免费网站| 午夜精品久久久久久久久久久 | 欧美理论在线观看| 欧美人在线观看| 欧美国产视频| 日本一区二区三区免费观看| 激情欧美一区二区三区| 亚洲精品性视频| 日本一区二区三级电影在线观看| 欧美成人aaaaⅴ片在线看| 欧美一二三四区在线| 美丽的姑娘在线观看免费动漫| 欧美成人精品在线播放| 国精品产品一区| 久久这里精品国产99丫e6| 亚洲日本国产| 欧美一级特黄aaa| 国产精品区一区二区三区 | 欧美日韩dvd在线观看| 毛片在线播放网址| 欧美一级电影久久| 日韩在线黄色| 日本中文字幕网址| 91蝌蚪国产九色| 久久夜色精品国产噜噜亚洲av| 亚洲第一精品夜夜躁人人爽| 超碰高清在线| 久久久久久欧美精品色一二三四 | 三级视频中文字幕| 国产清纯白嫩初高生在线观看91| 蜜臀精品一区二区三区| 亚洲午夜小视频| 日韩毛片免费观看| 日本午夜精品一区二区| 日韩电影在线一区二区| 一区二区黄色片| 在线中文字幕一区| 午夜视频在线免费观看| 成人黄色在线播放| 中文字幕日韩欧美精品高清在线| 少妇愉情理伦片bd| 亚洲成人一区二区在线观看| 粉嫩精品一区二区三区在线观看 | 国产情侣久久久久aⅴ免费| 亚洲影院在线观看| 蜜桃av噜噜一区二区三区麻豆| 欧美韩国理论所午夜片917电影| 懂色av一区二区| 玩弄中年熟妇正在播放| 久久欧美中文字幕| 国产在线观看第一页| 亚洲人成自拍网站| 99久久综合国产精品二区| 日本精品一区| 美女视频第一区二区三区免费观看网站| 无码黑人精品一区二区| 精品久久久久久无| 鲁鲁在线中文| 午夜精品一区二区在线观看| 精品一区二区三区免费毛片爱| 老妇女50岁三级| 亚洲国产女人aaa毛片在线| 久久青青视频| 最新黄色av网站| 成人avav影音| 波多野结衣视频免费观看| 另类视频在线观看| 女同久久另类99精品国产| 精品视频无码一区二区三区| 亚洲色图88| 免费国产在线精品一区二区三区| 久久激情婷婷| 黑鬼狂亚洲人videos| 成人性视频网站| 97精品在线视频| 国产伊人久久|