Библиотека привязки Xamarin.iOS не может использовать API SecKey из платформы безопасности

Я создал библиотеку привязки из фреймворка objective-c. Он работает, но не может использовать api шифрования SecKey в структуре безопасности. Библиотека использовала его для запроса api. Фреймворк безопасности не полностью поддерживается в Xamarin.iOS? Или он не работает, когда его использовала библиотека привязки?

Примечание: Кстати, я добавил эту строку в собственный фреймворк для зависимости:

 <Frameworks>Foundation CFNetwork CoreFoundation Security</Frameworks>

Обновление 1:

Это журнал устройства:

Trust evaluate failure: [leaf AnchorTrusted]
DemoX[10647]/1#-1 LF=22 add Error Domain=NSOSStatusErrorDomain Code=-34018 "Client has neither application-identifier nor keychain-access-groups entitlements" UserInfo={NSDescription=Client has neither application-identifier nor keychain-access-groups entitlements}
SecTaskLoadEntitlements failed error=22 cs_flags=200, pid=10438
SecTaskCopyDebugDescription: DemoX[10039]/0#-1 LF=0
nw_protocol_boringssl_signal_connected(728) [C13.1:2][0x7fbe21309f80] TLS connected [version(0x0303) ciphersuite(TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) group(0x001d) signature_alg(0x0601) alpn(http/1.1) resumed(0) offered_ticket(0) false_started(0) ocsp_received(0) sct_received(0) connect_time(1811ms) flight_time(144ms) rtt(72ms) write_stalls(0) read_stalls(5)]    
Trust evaluate failure: [leaf AnchorTrusted]
Trust evaluate failure: [leaf AnchorTrusted TemporalValidity]

Обновление 2:

Когда я запускаю фреймворк с XCode, появляются строки ниже, но не в моем приложении Xamarin.iOS

inserted <keys,kcls=0,klbl=,atag=5253415574696C5F5075624B6579,
crtr=0,type=42,bsiz=0,esiz=0,sdat=2001-01-01 00:00:00 +0000,
edat=2001-01-01 00:00:00+0000,agrp=A7PT8PDBPQ.com.test.app,sync=0,
musr=,|otherAttr,tomb=0,rowid=9,cdat=2020-11-07 11:02:34 +0000,mdat=2020-11-07 11:02:34+0000,pdmn=ak,
sha1=24BB5BBEE125D6A051E08EA2CB72469A0C62042F,v_Data=<?>,
UUID=********-****-****-****-************,
persistref=,clip=0> from <SecDbConnection rw open>

а также

deleted 
<keys,kcls=0,klbl=,atag=5253415574696C5F5075624B6579,crtr=0,type=42,
bsi=,esiz=0,sdat=2001-01-01 00:00:00 +0000,edat=2001-01-01 00:00:00
+0000,agrp=A7PT8PDBPQ.com.test.app,sync=0,musr=,
|otherAttr,tomb=0,rowid=7,cdat=2020-11-07 11:01:55 
+0000,mdat=2020-11-07 11:01:55 +0000,pdmn=ak,
sha1=F1A9A4EC0C5AC67D354C9D7602E118B8DF5EFAF5,
v_Data=<?>,accc=310C300A0C0470726F740C02616B,
UUID=********-****-****-****-************,
persistref=,clip=0> from <SecDbConnection rw open>

person Tuğçe Arar    schedule 06.11.2020    source источник
comment
Какие именно методы фреймворка безопасности вы пытаетесь вызвать?   -  person SushiHangover    schedule 06.11.2020
comment
В библиотеке они получают открытый ключ с сервера и делают его SecKeyRef, после чего шифруют его с помощью этого developer.apple.com/documentation/security/.   -  person Tuğçe Arar    schedule 06.11.2020
comment
SecKeyRef просто IntPtr в Xamarin.iOS, а SecKeyCreateEncryptedData точка входа определяется как DllImport, так как это C вызов (github.com/xamarin/xamarin-macios/blob/) Xamarin создал методы-оболочки, называемые CreateEncryptedData, CreateDecryptedData, и т. Д., Чтобы сделать эти нативные C проще использовать вызовы (все они определены в Security/Certificate.cs файле, который я связал.   -  person SushiHangover    schedule 06.11.2020
comment
Хорошо, но почему библиотека не может его использовать?   -  person Tuğçe Arar    schedule 06.11.2020
comment
Какая у ВАС проблема с привязкой библиотеки тогда (?), Поскольку это фреймворк на основе ObjC, он не будет иметь ничего общего с Xamarin, но если интерфейсы библиотеки привязки, которые вы создали, неверны, то библиотека может быть получение неверных данных ....   -  person SushiHangover    schedule 06.11.2020
comment
Проблема в том, что шифрование не удалось, когда я использую библиотеку в демонстрационном приложении. Он должен отправить зашифрованный ключ с запросом api.   -  person Tuğçe Arar    schedule 06.11.2020
comment
@SushiHangover - Включена ли безопасность в Xamarin.iOS.dll? Я этого не вижу.   -  person Tuğçe Arar    schedule 06.11.2020
comment
Да, ссылка на исходный код выше предназначена только для Cert, поднимитесь на один уровень до Security, который включен в Xamarin.iOS. Помните, что Security не является типичной структурой, его общедоступные API-интерфейсы определяются заголовочными файлами C (*.h), вы можете открывать их в Xcode, чтобы просмотреть их, Xamarin обертывает их для использования из C # / F #   -  person SushiHangover    schedule 07.11.2020
comment
@SushiHangover Я добавил к ответу логи устройства.   -  person Tuğçe Arar    schedule 07.11.2020
comment
Вы прочитали сообщение об ошибке? В нем прямо говорится, что вам не хватает прав.   -  person Cheesebaron    schedule 07.11.2020
comment
@Cheesebaron может быть эта ошибка связана с доступом к связке ключей? Потому что в XCode вы можете использовать его с бесплатной учетной записью, но в VS Mac это невозможно.   -  person Tuğçe Arar    schedule 07.11.2020
comment
Вы добавили право на связку ключей? Часто требуется для бега на тренажерах.   -  person Cheesebaron    schedule 08.11.2020
comment
@Cheesebaron да, но это дало мне ошибку не удалось найти профиль подготовки. Итак, после того, как я установил сертификаты разработки, все заработало. Я думаю, что Visual Studio Mac не поддерживает бесплатную учетную запись разработчика.   -  person Tuğçe Arar    schedule 08.11.2020


Ответы (1)


Так что я отвечу на свои вопросы, так как нашел решение. Причина проблемы заключается в том, что SecKeyRef использует доступ KeyChain для чтения и записи ключа, как указано в официальной документации:

Экземпляр SecKeyRef, представляющий ключ, который хранится в цепочке для ключей, можно безопасно преобразовать в SecKeychainItemRef для манипулирования как элементом цепочки для ключей. С другой стороны, если ключ не хранится в цепочке для ключей, приведение объекта к SecKeychainItemRef и передача его в функции службы цепочки ключей возвращает ошибки.

Наличие профиля подготовки в Xcode для использования SecKeyRef не важно, но в Visual Studio Mac необходимо использовать Entitlements.plist для включения доступа к связке ключей. Поэтому, если ваша библиотека привязки использует SecKey API, вам необходимо включить KeyChain Access в Entitlements.plist и установить учетную запись разработчика Apple в проекте.

<key>keychain-access-groups</key>
<array>
    <string>$(AppIdentifierPrefix)com.company.yourapp</string>
</array>
person Tuğçe Arar    schedule 07.11.2020
comment
Спасибо, что поделился. Не забудь принять ответ - person Wendy Zang - MSFT; 09.11.2020