Как я могу настроить сквозное соединение ssl со шлюзом приложений и apache httpd? - PullRequest
0 голосов
/ 04 июля 2019

Я устанавливаю в Azure шлюз приложения, для которого нужно, чтобы конечное соединение SSL заканчивалось моим сервером apache httpd, который обслуживает мою страницу с виртуальной машины

. Я установил параметры прослушивателя и HTTP,похоже, что он работает с простым http для внешнего интерфейса и бэкэнда

Мой сервер обслуживает https с сертификатом ".crt"

Для того, чтобы сквозной https работал на шлюзе приложений, вам нужновнести в белый список сертификат конца.Для этого вам нужно добавить файл «.cer» в настройках HTTP.

Когда я запрашиваю страницу, я получаю следующую ошибку:

502 Bad Gateway Microsoft-Azure-Application-Gateway/v2

Я уже выполнил следующие инструкции, предоставленные Microsoft

Как упоминалось в первой ссылке, полное доменное имя внутреннего пула должно совпадать с CN сертификата.

Также я попытался сгенерировать «.pfx», а затем экспортировать «.cer» и«.crt» файлы безуспешно.

Проверка работоспособности бэкэнда показывает, что бэкэнд-сервер исправен, поэтому шлюз appgate может достигнуть хоста бэкэнда.Я использую V2 и добавляю ".cer" в кодировке base 64. Полное доменное имя совпадает с именем DNS внутреннего узла

. Я использовал следующие команды для генерации сертификатов

openssl genrsa -des3 -out rootCA.key 4096

openssl req -x509 -new -nodes -key rootCA.key -sha256 \
-days 1024 -out rootCA.crt

openssl genrsa -out my.domain.com.key 2048


openssl req -new -sha256 -key my.domain.com.key \
-subj "/C=GR/ST=Attica/O=mycompany/CN=my.domain.com" \
 -out my.domain.com.csr


openssl x509 -req -in my.domain.com.csr \
-CA rootCA.crt -CAkey rootCA.key -CAcreateserial \
-out my.domain.com.crt -days 500 -sha256 

После этого я импортировал файл «rootCA.crt» в диспетчер сертификации Windows и экспортировал как base64 «.cer». Я использовал экспортированный сертификат в разделе «Надежные корневые сертификаты» в шлюзе приложения

Шаблон развертыванияявляется следующим:

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "serverapplicationGateways_name_app_gateway_name": {
            "defaultValue": "name-app-gateway",
            "type": "String"
        },
        "virtualNetworks_name_app_gateway_externalid": {
            "defaultValue": "/subscriptions/[subscription-id]/resourceGroups/name-app-gateway-rg/providers/Microsoft.Network/virtualNetworks/name-app-gateway",
            "type": "String"
        },
        "publicIPAddresses_name_app_gateway_pip_externalid": {
            "defaultValue": "/subscriptions/[subscription-id]/resourceGroups/name-app-gateway-rg/providers/Microsoft.Network/publicIPAddresses/name-app-gateway-pip",
            "type": "String"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Network/applicationGateways",
            "apiVersion": "2019-04-01",
            "name": "[parameters('serverapplicationGateways_name_app_gateway_name')]",
            "location": "westeurope",
            "properties": {
                "provisioningState": "Succeeded",
                "resourceGuid": "20beed4d-2ff5-440b-918f-5772d6c91ad2",
                "sku": {
                    "name": "Standard_v2",
                    "tier": "Standard_v2"
                },
                "gatewayIPConfigurations": [
                    {
                        "name": "appGatewayIpConfig",
                        "etag": "W/\"be033d5e-9b23-400a-b6ca-f5cbede2a4e5\"",
                        "properties": {
                            "provisioningState": "Succeeded",
                            "subnet": {
                                "id": "[concat(parameters('virtualNetworks_name_app_gateway_externalid'), '/subnets/default')]"
                            }
                        },
                        "type": "Microsoft.Network/applicationGateways/gatewayIPConfigurations"
                    }
                ],
                "sslCertificates": [
                    {
                        "name": "company",
                        "etag": "W/\"be033d5e-9b23-400a-b6ca-f5cbede2a4e5\"",
                        "properties": {
                            "provisioningState": "Succeeded",
                            "publicCertData": "MIIDvgYJKoZIhvcNAQcCoIIDrzCCA6sCAQExADALBgkqhkiG9w0BBwGgggOTMIIDjzCCAnegAwIBAgIUCgwbAVCKmec/OdsO1bwmpDX/6/UwDQYJKoZIhvcNAQELBQAwVzELMAkGA1UEBhMCR1IxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEQMA4GA1UEAwwHZmxleGZpbjAeFw0xOTA3MDMxNTI5MDlaFw0yMDA3MDIxNTI5MDlaMFcxCzAJBgNVBAYTAkdSMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxEDAOBgNVBAMMB2ZsZXhmaW4wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDfOIiBjcolw2GI+ZO1KYLR/En/2CQ8sQ+rBgocSFybHOsIbdm+nFvFSQLtdQf5lVjYFqhhBfhOP9otIa1UdEq0Mb+k0sZptJgW/ZziqLBsK5SwJxdwSxZgsfm4wKedS1bpYgVBBayKraKYCeUwUsUEoV/e5tjqRqC6i3Z3ZYAVdm4pf2vYJxjwKG1U0X3qyvjtv9nkJ2U3R3O1KILB1HPPdEe5nHHjkDravcghBxMjaI0YKgKcw2PyNiVcrcDZ3mrMoAvAzpLcbLIGvwfISjIMcI1wNYBfIC4qiLhlUASbudWGL8GFJ5/KZbsFNzq9ontwbjgeT8OLUJ47m+at3BN9AgMBAAGjUzBRMB0GA1UdDgQWBBSB4kKSMWZQ+Lxn1yiXdEvaT/H1BTAfBgNVHSMEGDAWgBSB4kKSMWZQ+Lxn1yiXdEvaT/H1BTAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAEeaAMSAZWqlPGmM+Rzrxuj1joD514pxuSEmJfiDUf8TczNjh1g6sLC0eGqzI+Om4APz/mn2z8t5ziWnxDD+jtzLM4CjWGxOR1873fsAPjz/PdBfaNCpXBeXvS4LMrAYnZocFel1ypIAfty+KGWWkE7z6hbQr8OCrlnpmHnU/+OdtjuEPKqQVFVmJUHDzwiOSQgqCDIq0CYDKii1+1OCIVdce7VmWFMiGucqujM2Q8QbWZILVb82Yee6AnnyenmvWsO6pJawrOtg0IYYnGJPILqjFU1yk1ox7OBZHjoxz9U43JL2FnwVdMphU1vIU5huW22tRigHnvjuSUPRhXL0ejMQA="
                        },
                        "type": "Microsoft.Network/applicationGateways/sslCertificates"
                    }
                ],
                "trustedRootCertificates": [
                    {
                        "name": "server-uat",
                        "etag": "W/\"be033d5e-9b23-400a-b6ca-f5cbede2a4e5\"",
                        "properties": {
                            "provisioningState": "Succeeded",
                            "data": "sertificate data"
                        },
                        "type": "Microsoft.Network/applicationGateways/trustedRootCertificates"
                    }
                ],
                "frontendIPConfigurations": [
                    {
                        "name": "appGwPublicFrontendIp",
                        "etag": "W/\"be033d5e-9b23-400a-b6ca-f5cbede2a4e5\"",
                        "type": "Microsoft.Network/applicationGateways/frontendIPConfigurations",
                        "properties": {
                            "provisioningState": "Succeeded",
                            "privateIPAllocationMethod": "Dynamic",
                            "publicIPAddress": {
                                "id": "[parameters('publicIPAddresses_name_app_gateway_pip_externalid')]"
                            }
                        }
                    }
                ],
                "frontendPorts": [
                    {
                        "name": "port_443",
                        "etag": "W/\"be033d5e-9b23-400a-b6ca-f5cbede2a4e5\"",
                        "properties": {
                            "provisioningState": "Succeeded",
                            "port": 443
                        },
                        "type": "Microsoft.Network/applicationGateways/frontendPorts"
                    },
                    {
                        "name": "http-port",
                        "etag": "W/\"be033d5e-9b23-400a-b6ca-f5cbede2a4e5\"",
                        "properties": {
                            "provisioningState": "Succeeded",
                            "port": 80
                        },
                        "type": "Microsoft.Network/applicationGateways/frontendPorts"
                    }
                ],
                "backendAddressPools": [
                    {
                        "name": "server",
                        "etag": "W/\"be033d5e-9b23-400a-b6ca-f5cbede2a4e5\"",
                        "properties": {
                            "provisioningState": "Succeeded",
                            "backendAddresses": [
                                {
                                    "fqdn": "server-prod.internal.company.com"
                                }
                            ]
                        },
                        "type": "Microsoft.Network/applicationGateways/backendAddressPools"
                    }
                ],
                "backendHttpSettingsCollection": [
                    {
                        "name": "server-http-setting",
                        "etag": "W/\"be033d5e-9b23-400a-b6ca-f5cbede2a4e5\"",
                        "properties": {
                            "provisioningState": "Succeeded",
                            "port": 443,
                            "protocol": "Https",
                            "cookieBasedAffinity": "Disabled",
                            "pickHostNameFromBackendAddress": true,
                            "requestTimeout": 20,
                            "trustedRootCertificates": [
                                {
                                    "id": "[concat(resourceId('Microsoft.Network/applicationGateways', parameters('serverapplicationGateways_name_app_gateway_name')), '/trustedRootCertificates/server')]"
                                },
                                {
                                    "id": "[concat(resourceId('Microsoft.Network/applicationGateways', parameters('serverapplicationGateways_name_app_gateway_name')), '/trustedRootCertificates/httpd')]"
                                },
                                {
                                    "id": "[concat(resourceId('Microsoft.Network/applicationGateways', parameters('serverapplicationGateways_name_app_gateway_name')), '/trustedRootCertificates/server-http-settingeeab8427-4514-4ef4-8e94-7d155a76f037')]"
                                },
                                {
                                    "id": "[concat(resourceId('Microsoft.Network/applicationGateways', parameters('serverapplicationGateways_name_app_gateway_name')), '/trustedRootCertificates/httpd-root')]"
                                },
                                {
                                    "id": "[concat(resourceId('Microsoft.Network/applicationGateways', parameters('serverapplicationGateways_name_app_gateway_name')), '/trustedRootCertificates/server-uat')]"
                                }
                            ]
                        },
                        "type": "Microsoft.Network/applicationGateways/backendHttpSettingsCollection"
                    },
                    {
                        "name": "server-http-80-setting",
                        "etag": "W/\"be033d5e-9b23-400a-b6ca-f5cbede2a4e5\"",
                        "properties": {
                            "provisioningState": "Succeeded",
                            "port": 80,
                            "protocol": "Http",
                            "cookieBasedAffinity": "Disabled",
                            "pickHostNameFromBackendAddress": false,
                            "affinityCookieName": "ApplicationGatewayAffinity",
                            "requestTimeout": 20
                        },
                        "type": "Microsoft.Network/applicationGateways/backendHttpSettingsCollection"
                    }
                ],
                "httpListeners": [
                    {
                        "name": "server-l",
                        "etag": "W/\"be033d5e-9b23-400a-b6ca-f5cbede2a4e5\"",
                        "properties": {
                            "provisioningState": "Succeeded",
                            "frontendIPConfiguration": {
                                "id": "[concat(resourceId('Microsoft.Network/applicationGateways', parameters('serverapplicationGateways_name_app_gateway_name')), '/frontendIPConfigurations/appGwPublicFrontendIp')]"
                            },
                            "frontendPort": {
                                "id": "[concat(resourceId('Microsoft.Network/applicationGateways', parameters('serverapplicationGateways_name_app_gateway_name')), '/frontendPorts/port_443')]"
                            },
                            "protocol": "Https",
                            "sslCertificate": {
                                "id": "[concat(resourceId('Microsoft.Network/applicationGateways', parameters('serverapplicationGateways_name_app_gateway_name')), '/sslCertificates/company')]"
                            },
                            "requireServerNameIndication": false
                        },
                        "type": "Microsoft.Network/applicationGateways/httpListeners"
                    },
                    {
                        "name": "server-http-l",
                        "etag": "W/\"be033d5e-9b23-400a-b6ca-f5cbede2a4e5\"",
                        "properties": {
                            "provisioningState": "Succeeded",
                            "frontendIPConfiguration": {
                                "id": "[concat(resourceId('Microsoft.Network/applicationGateways', parameters('serverapplicationGateways_name_app_gateway_name')), '/frontendIPConfigurations/appGwPublicFrontendIp')]"
                            },
                            "frontendPort": {
                                "id": "[concat(resourceId('Microsoft.Network/applicationGateways', parameters('serverapplicationGateways_name_app_gateway_name')), '/frontendPorts/http-port')]"
                            },
                            "protocol": "Http",
                            "requireServerNameIndication": false
                        },
                        "type": "Microsoft.Network/applicationGateways/httpListeners"
                    }
                ],
                "urlPathMaps": [],
                "requestRoutingRules": [
                    {
                        "name": "server-rr",
                        "etag": "W/\"be033d5e-9b23-400a-b6ca-f5cbede2a4e5\"",
                        "properties": {
                            "provisioningState": "Succeeded",
                            "ruleType": "Basic",
                            "httpListener": {
                                "id": "[concat(resourceId('Microsoft.Network/applicationGateways', parameters('serverapplicationGateways_name_app_gateway_name')), '/httpListeners/server-l')]"
                            },
                            "backendAddressPool": {
                                "id": "[concat(resourceId('Microsoft.Network/applicationGateways', parameters('serverapplicationGateways_name_app_gateway_name')), '/backendAddressPools/server')]"
                            },
                            "backendHttpSettings": {
                                "id": "[concat(resourceId('Microsoft.Network/applicationGateways', parameters('serverapplicationGateways_name_app_gateway_name')), '/backendHttpSettingsCollection/server-http-setting')]"
                            }
                        },
                        "type": "Microsoft.Network/applicationGateways/requestRoutingRules"
                    },
                    {
                        "name": "redirect-to-https",
                        "etag": "W/\"be033d5e-9b23-400a-b6ca-f5cbede2a4e5\"",
                        "properties": {
                            "provisioningState": "Succeeded",
                            "ruleType": "Basic",
                            "httpListener": {
                                "id": "[concat(resourceId('Microsoft.Network/applicationGateways', parameters('serverapplicationGateways_name_app_gateway_name')), '/httpListeners/server-http-l')]"
                            },
                            "backendAddressPool": {
                                "id": "[concat(resourceId('Microsoft.Network/applicationGateways', parameters('serverapplicationGateways_name_app_gateway_name')), '/backendAddressPools/server')]"
                            },
                            "backendHttpSettings": {
                                "id": "[concat(resourceId('Microsoft.Network/applicationGateways', parameters('serverapplicationGateways_name_app_gateway_name')), '/backendHttpSettingsCollection/server-http-80-setting')]"
                            }
                        },
                        "type": "Microsoft.Network/applicationGateways/requestRoutingRules"
                    }
                ],
                "probes": [],
                "rewriteRuleSets": [],
                "redirectConfigurations": [],
                "enableHttp2": false,
                "autoscaleConfiguration": {
                    "minCapacity": 2,
                    "maxCapacity": 10
                }
            }
        }
    ]
}

1 Ответ

0 голосов
/ 05 июля 2019

Прежде всего, вы можете проверить backend health в мониторинге шлюза приложения. Найдите сведения об ошибке 502, а затем устраните ее, следуя пошаговым инструкциям по этой ссылке . Возможно, вы могли бы также сузить сценарий, если это работает, когда вы устанавливаете нормальные настройки с протоколом HTTP.

Сертификаты аутентификации устарели и заменены Сертификатами доверенного корня в шлюзе приложений v2 SKU. Похоже, вам нужно убедиться, что вы используете корневой сертификат для внесения в белый список бэкэндов в настройках HTTP .

Для SKU V2 следует отметить следующую ссылку здесь .

  • Сертификаты, подписанные хорошо известными центрами сертификации, чей CN соответствует имени хоста в настройках бэкэнда HTTP, не требуют дополнительный шаг для сквозного SSL для работы.
  • Например, если бэкэнд-сертификаты выпущены хорошо известным центром сертификации и имеют CN из contoso.com и хост настройки бэкэнда http поле также установлено на contoso.com, тогда никаких дополнительных шагов требуется. Вы можете установить протокол настройки HTTP бэкэнда на HTTPS и Для проверки работоспособности и пути к данным будет включен SSL. Если вы используя службу приложений Azure или другие веб-службы Azure в качестве внутреннего сервера, тогда им неявно доверяют, и никаких дальнейших шагов требуется для сквозного SSL.
  • Если сертификат самоподписан или подписан неизвестными посредниками, то для включения сквозного SSL в v2 SKU доверенного корня Сертификат должен быть определен. Шлюз приложений будет общаться только с бэкэндами, чей корневой сертификат сертификата сервера соответствует одному списка доверенных корневых сертификатов в настройке http сервера связан с бассейном.
  • Помимо совпадения корневого сертификата, Application Gateway также проверяет, указан ли параметр Host в настройке http внутреннего интерфейса. соответствует общему имени (CN), представленному серверным сервером SSL сертификат. При попытке установить SSL-соединение с Серверный шлюз приложений устанавливает индикацию имени сервера (SNI) добавочный номер хоста, указанный в настройке бэкэнда http.
  • Если выбрать имя хоста из адресов бэкэнда s выбрано вместо поля Host в настройке http бэкэнда, тогда заголовок SNI всегда установить полное доменное имя внутреннего пула и CN на SSL внутреннего сервера сертификат должен соответствовать его FQDN . Члены внутреннего пула с IP-адресами не являются поддерживается в этом сценарии.
  • Корневой сертификат является корневым сертификатом в кодировке base64 из сертификатов внутреннего сервера.

Если все вышеперечисленное не дает результатов, вы можете загрузить свои настройки, скрыв некоторые конфиденциальные данные для получения дополнительной помощи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...