Счет необходимо использовать частный IP для достижения экземпляров внутренне так, чтобы Вы не становились обвиненными за передачу данных между ними. Чтобы сделать это, не имея необходимость реконфигурировать Ваше программное обеспечение, можно установить ссылки CNAME в DNS для перевода статического имени под одним из доменов к эластичному IP-адресу. Путем выполнения этого поиска эластичного IP CNAME амазонка система DNS поймает поиск и возвратит ВНУТРЕННИЙ адрес вместо внешнего, который все во внешнем мире получат. Viola, лучшая из обоих миров! Статические названия DNS в программном обеспечении и внешние люди получают Ваш эластичный IP, и Ваши внутренние экземпляры получают внутренние маршруты IP без зарядов данных!
Кроме того, Ваш эластичный IP routable из EC2, но необходимо открыть брандмауэр, особенный для него, я думаю.
Править: Для более ссылочного и практических руководств по этой проблеме посмотрите writups на Alestic и Apparently Так. Существует также вопрос, ссылающийся на проблему здесь о ServerFault.
Включен ли UAC
в системе? В этом случае, даже если вы входите в систему с учетной записью администратора, эта учетная запись будет непривилегированной до тех пор, пока вы явно не запросите повышенные привилегии (через «Запуск от имени администратора»). Можете ли вы запустить командную строку «от имени администратора» и изменить разрешения с помощью icacls
?
icacls C:\YOUR\EXTRACTED\file /grant "Authenticated Users:(CI)(OI)F
Пытались ли вы получить права собственности на эти файлы?
В какой учетной записи пользователя запускается сценарий, который загружает эти файлы? Обычно владельцем файлов является создатель.
Хорошо, мы сделали то же самое, что и вы. Мы работали наоборот. Сначала мы защитили IIS с помощью сертификата клиента и сервера. Мы сделали это в IIS Express (все еще в разработке, пока я публикую это). Мы разрешили в IIS express applicationhost.config
перезаписывать определенные части файла web.config. То есть:
Конфигурация на стороне сервера:
<sytem.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="ClientCert">
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<!--We have a custom service behavior for claim based security -->
<behavior name="wsHttpCertificateBehavior">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
<serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true" />
<serviceAuthorization serviceAuthorizationManagerType="MyNamespace.AdamAuthorizationManager, MyAssembly">
<authorizationPolicies>
<add policyType="MyNamespace.AdamAuthorizationPolicy, MyAssembly" />
</authorizationPolicies>
</serviceAuthorization>
<serviceCredentials>
<serviceCertificate findValue="YourServerCertificateNameWithoutCN=" x509FindType="FindBySubjectName" storeLocation="LocalMachine" storeName="My" />
<clientCertificate>
<authentication revocationMode="NoCheck" mapClientCertificateToWindowsAccount="true" />
</clientCertificate>
</serviceCredentials>
</behavior>
</behaviors>
<services>
<service name="MyNamespace.OrderService" behaviorConfiguration="wsHttpCertificateBehavior">
<endpoint address="https://iisurl/OrderService.svc/ClientCert" contract="wsHttpCertificateBehavior.IOrderService" binding="wsHttpBinding" bindingConfiguration="ClientCert">
</endpoint>
</service>
</services>
</sytem.serviceModel>
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true" />
<anonymousAuthentication enabled="true" />
<iisClientCertificateMappingAuthentication defaultLogonDomain="YourDomain" enabled="true" oneToOneCertificateMappingsEnabled="true">
<oneToOneMappings>
<add enabled="true" certificate="Base64HashOfTheCertificate" userName="YourUserName" password="YourPassword" />
</oneToOneMappings>
</iisClientCertificateMappingAuthentication>
</authentication>
<authorization>
<add users="*" accessType="Allow" />
</authorization>
<!--Require SSL *AND* require a client certificate -->
<access sslFlags="Ssl, SslNegotiateCert, SslRequireCert" />
</security>
</system.WebServer>
На клиенте:
<system.serviceModel>
<wsHttpBinding>
<binding name="ClientCertificate">
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
<behaviors>
<endpointBehaviors>
<behavior name="wsHttpCertificateBehavior">
<clientCredentials>
<clientCertificate findValue="YourClientCertificateNameWithoutCN=" storeLocation="CurrentUser" storeName="My" x509FindType="FindBySubjectName"/>
<serviceCertificate>
<authentication revocationMode="NoCheck"/>
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
<client>
<endpoint name="ClientCertificate" address="https://iisurl/OrderService.svc/ClientCert" contract="MyNamespace.IOrderService" binding="wsHttpBinding" bindingConfiguration="ClientCertificate" behaviorConfiguration="wsHttpCertificateBehavior">
</endpoint>
</client>
</system.serviceModel>
Нам очень помогло включение трассировки, входа в службу, настраиваемой политики авторизации и журналов трассировки IIS.
У нас есть iisurl
, сопоставленный с 127.0.0.1. 0.1 в нашем хост-файле, поэтому у нас есть доверенные сертификаты. Для iisClientCertificationMapping проверьте это out.
Не знаю, правильна ли ваша настройка ssl. Для этого у нас есть сценарий PowerShell. Некоторые его части:
Генерация корневого сертификата (PowerShell)
Invoke-Command -ScriptBlock{ . "C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\makecert.exe" -n "CN=YourRootCA" -r -sv YourRootCA.pvk YourRootCA.cer}
$certFile = get-childitem $exPath | where {$_.FullName -match "GlobalVisionServicesRootCA.cer"}
if ($certFile -ne $NULL) {
echo "Discovered the YourRootCA.cer in the same folder as this script, installing it in the LocalMachine\Root certificate store.."
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($certFile.FullName)
$rootStore = new-object system.security.cryptography.x509certificates.x509Store 'Root','LocalMachine'
$rootStore.Open('ReadWrite')
$rootStore.Add($cert)
$rootStore.Close()
}
Генерация сертификата сервера (командная строка):
makecert.exe -sk YourDevSrvCert -iv YourRootCA.pvk -n "CN=iisurl" -ic YourRootCA.cer -sr localmachine -ss my -sky exchange -pe yourservercertificate.cer
Генерация клиента сервера (командная строка):
makecert.exe -sk ClientDevSrvCert -iv YourRootCA.pvk -n "CN=iisurl" -ic GlobalVisionServicesRootCA.cer -sr localmachine -ss my -sky exchange -pe iisurl.cer
Привязка сертификатов к IIS (командная строка , Для XP):
httpcfg.exe delete ssl -i "0.0.0.0:443"
httpcfg.exe" delete urlacl url="https://iisurl:443/"
httpcfg.exe set urlacl url="https://iisurl:443/" user=Everyone
httpcfg.exe" set ssl -i "0.0.0.0:443" -h ThumpPrint
измените ThumpPrint на ThumpPrint сертификата с именем субъекта iisurl. Я рекомендую вам полностью автоматизировать это с помощью PowerShell, у нас это есть, чтобы мы могли разрабатывать на нескольких машинах. Но я не могу пройти мимо всего этого здесь.
Надеюсь, это вам поможет. С этой конфигурацией, если вы переходите по https к URL-адресу iisurl / OrderService, он запрашивает у вас сертификат клиента. (В IE)
Вы также можете посмотреть этот журнал: C: \ WINDOWS \ system32 \ Logfiles \ HTTPERR
убедитесь, что установлен флажок Заменить владельца подконтейнеров и объектов
.
Применить
и закройте все вкладки свойств. ОБНОВЛЕНИЕ:
В ответ на ваш комментарий о том, что он не работает через графический интерфейс:
cmd.exe
с повышенными правами ( Щелкните правой кнопкой мыши -> Запуск от имени администратора
). Лучшими утилитами Windows CLI для этой задачи являются XCACLS, для которого вы можете найти хорошее руководство по использованию здесь и CACLS, для которых вы можете найти хорошее применение здесь .