|
|
|
VBA & HTTPS
|
|||
|---|---|---|---|
|
#18+
Подскажите плз кто-нибудь принципы работы с HTTPS из VBA. В данный момент приложение использует MSXML.XMLHTTPRequest для отправки запросов на web сервис через HTTP. Как это будет выглядеть при добавлении SSL? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2008, 12:37 |
|
||
|
VBA & HTTPS
|
|||
|---|---|---|---|
|
#18+
все так же, только кое-что придется добавить в коде на предмет подписи Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2008, 13:44 |
|
||
|
VBA & HTTPS
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответ. Насколько я понял второй блок кода отвечает за получение сертификата... А можно вкратце о сертификатах (ну или ссылочку на информацию)? Сертификат - это просто файл? Нужна ли каккая-нибудь регистрация на машине пользователя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2008, 13:52 |
|
||
|
VBA & HTTPS
|
|||
|---|---|---|---|
|
#18+
сертификат может быть и в файле (расширение pfx), но как правило он в личном хранилище сертификатов пользователя. а вообще почитайте в msdn по ServerXMLHTTP40 там есть примеры, может в вашем случае будет все намного проще и подписывать данные не нужно личным сертификатом пользователя :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2008, 14:07 |
|
||
|
VBA & HTTPS
|
|||
|---|---|---|---|
|
#18+
http://download.microsoft.com/download/9/6/5/9657c01e-107f-409c-baac-7d249561629c/MSXML4SP_RelNote.htm тут посмотри еще ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2008, 14:58 |
|
||
|
VBA & HTTPS
|
|||
|---|---|---|---|
|
#18+
Выяснил такую вещь. При указании для MSXML.XMLHTTPRequest не http а https соединения подключение ведёт себя так же, как если бы это был обычный IE: то есть при наличии сертификата сервера в доверенных источниках просто осуществляет подключение, а при отсутствии в доверенных источниках выдаёт сообщение о том, что данный сертификат не является доверенным и предлагает осуществить подключение для данной сессии, либо инсталлировать сертификат. То есть пользователь при каждой новой сессии приложения при попытке подключения будет получать это окно и нажимать кнопку для разрешения подключения (предполагается что пользователь не может инсталлировать сертификат). Есть ли способ программно подавить это окно, для того чтобя по умолчанию соединение было разрешено? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2008, 14:39 |
|
||
|
VBA & HTTPS
|
|||
|---|---|---|---|
|
#18+
> Автор: scoritt > Выяснил такую вещь. > Есть ли способ программно подавить это окно, для того чтобя по > умолчанию соединение было разрешено? Через руководство произвести мотивацию админа на установку нужных сертификатов на клиентских машинах. А что-бы это было программно подари руководителю или админу какую нибудь программу > Спасибо Не за что Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2008, 15:02 |
|
||
|
VBA & HTTPS
|
|||
|---|---|---|---|
|
#18+
вы нашли решение своей задачи? может быть эта проблема аналогична вашей и вы сможете подсказать выход из тупика... ниже представлен тестовый пример, который подписывает тестовые данные и тут же проверяет подпись. проблема в том, что подпись является невалидной. my $data = '1234567890'; my $user = '18b729e9d7485c1b12964e2ef3fba8a8'; # идентификатор юзера, по которому находится сертияикат (ниже) # ищем сертификат my $Store = Win32::OLE->new('CAPICOM.Store') or die "Cannot start CAPICOM.Store"; $Store->Open( CAPICOM_CURRENT_USER_STORE, "My", CAPICOM_STORE_OPEN_READ_ONLY ); my $Certificates = $Store->Certificates; my $certificate; for ( my $i = 1 ; $i <= $Certificates->Count() ; $i++ ) { my $Certificate = $Certificates->Item($i); if ( hashSubjectName( $Certificate->SubjectName() ) eq $user ) { $certificate = $Certificate; last; } } print $certificate->SubjectName(); # да, наш сертификат, имеет приватный ключ $Certificate->HasPrivateKey() # подписываем выше найденным сертификатом my $Signer = Win32::OLE->new('CAPICOM.Signer') or die "Cannot start CAPICOM.Signer"; $Signer->LetProperty( 'Certificate', $certificate ); my $SignedData = Win32::OLE->new('CAPICOM.SignedData') or die "Cannot start CAPICOM.SignedData"; $SignedData->LetProperty( 'Content', $data ); # или $SignedData->Content($data) ? my $signature = $SignedData->Sign( $Signer, 1, CAPICOM_ENCODE_BASE64 ); print $signature; # что-то есть # проверяем подпись my $SignedData = Win32::OLE->new('CAPICOM.SignedData') or die "Cannot start CAPICOM.SignedData"; $SignedData->LetProperty( 'Content', $data ); #или $SignedData->Content($data) ? print $SignedData->Verify( $signature, 1, CAPICOM_VERIFY_SIGNATURE_ONLY ); # возвращается undef, что значает, что подпись неверна (и так ли это?) если вывести все переменные сертификата из подписи(!) - $SignedData->Certificates(1); - то окажется, что он похож на исходный сертификатор (которым подписывали), НО он не имеет приватного ключа ($Certificate->HasPrivateKey()) в каком месте я допускаю ошибку? имеет смысл использовать CAPICOM_VERIFY_SIGNATURE_AND_CERTIFICATE ? заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2008, 16:13 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=35182435&tid=2162356]: |
0ms |
get settings: |
11ms |
get forum list: |
26ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
93ms |
get topic data: |
18ms |
get forum data: |
9ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
| others: | 221ms |
| total: | 460ms |

| 0 / 0 |
