Как проверить сертификат веб-сайта в Касании Какао?

Я делаю ту же задачу как это.

//in MessageHeader 
   private void SetValuesDefault()
   {
        MessageHeader header = this;             
        Framework.ObjectPropertyHelper.SetPropertiesToDefault<MessageHeader>(this);
   }

//in ObjectPropertyHelper
   public static void SetPropertiesToDefault<T>(T obj) 
   {
            Type objectType = typeof(T);

            System.Reflection.PropertyInfo [] props = objectType.GetProperties();

            foreach (System.Reflection.PropertyInfo property in props)
            {
                if (property.CanWrite)
                {
                    string propertyName = property.Name;
                    Type propertyType = property.PropertyType;

                    object value = TypeHelper.DefaultForType(propertyType);
                    property.SetValue(obj, value, null);
                }
            }
    }

//in TypeHelper
    public static object DefaultForType(Type targetType)
    {
        return targetType.IsValueType ? Activator.CreateInstance(targetType) : null;
    }
6
задан dbotha 9 August 2009 в 10:38
поделиться

1 ответ

NSURLConnection выдаст ошибку ( NSURLErrorDomain ), если вы попытаетесь подключиться к серверу с недопустимым сертификатом (например, он самоподписан, устарел, имеет неправильный хост и т. Д.) . Так что на самом деле вам не нужно выполнять какие-либо проверки самостоятельно, потому что все это делается за вас.

Если вы действительно хотите / должны отображать сводку сертификата SSL в вашем пользовательском интерфейсе, вам нужно будет раскрыть уровень из NSURLConnection и используйте вместо него низкоуровневый CFNetwork API. Если у вас есть CFReadStreamRef , находящийся в состоянии kCFStreamEventEndEncountered , вы сможете сделать следующее (при условии, что дескриптор вашего потока называется readStream ):

NSArray* certificates = [(NSArray*)CFReadStreamCopyProperty(readStream, kCFStreamPropertySSLPeerCertificates) autorelease]; 
if ([certificates count] > 0) { 
  SecCertificateRef certificate = (SecCertificateRef)[certificates objectAtIndex:0]; 
  NSString* description = [(NSString*)SecCertificateCopySubjectSummary(certificate) autorelease]; 
  NSData* data = [(NSData*)SecCertificateCopyData(certificate) autorelease]; 
}

Вы'

5
ответ дан 17 December 2019 в 04:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: