Gerenciamento de SSL

14/03/2012. Embora o Google possa lhe contar coisas sobre o número 0,000106503834, a história terá algo diferente a dizer. 14/03/2012: o dia em que futuros antropologistas (ou arrogantes Senhores do Tempo) irão para sempre associar à inclusão do offloading de SSL no serviço de Balanceamento de carga local da SoftLayer. Não
tema ou se esconda, pois a vigilância da SLAPI é igualada somente por um guarda da prisão de Atraxi. Uma vigilância que lhe trouxe a capacidade de não apenas de gerenciar sua transferência de SSL, mas também de acessar o gerenciador de certificado SSL.

O serviço SoftLayer_Security_Certificate fornece acesso ao novo gerenciador de certificado. Não há nenhuma restrição sobre o número ou origem de certificados, portanto, fique à vontade para usá-lo como um local centralizado de armazenamento para todos os certificados SSL.

Os exemplos a seguir supõem instanciação do cliente da seguinte forma:

$client = SoftLayer_SoapClient::getClient('SoftLayer_Security_Certificate', null, $apiUsername,  $apiKey);

Criando certificados

A inserção de um novo certificado SSL no gerenciador de certificado é realizada enviando SoftLayer_Security_Certificate templateObject para SoftLayer_Security_Certificate::createObject. Não precisamos definir nome comum, nome da organização ou datas de validade, pois o gerenciador de certificado irá extrapolá-los a partir do certificado fornecido. Esse método irá assegurar que as informações estejam corretas, tentando validação entre o certificado, a chave privada e o certificado intermediário, se fornecido.

$templateObject = new stdClass;
 
// Populate the certificate and private key.
// Please include -----BEGIN/END ----- delimiters
$templateObject->certificate = Enter Security Certificate Here>;
$templateObject->privateKey = Enter Private Key Here>;
 
// If the certificate authority issues provided an intermediate certificate
// you will need to include it here.
$templateObject->intermediateCertificate = Enter Intermediate Certificate Here>;
 
// Optional
$templateObject->certificateSigningRequest = Enter CSR Here>;
 
try { 
    $newCertificate = $client->createObject($templateObject);
    print_r($newCertificate);
} catch (Exception $e) {
    print "Certificate creation failed: " . $e->getMessage();
}

Editando certificados

As entradas do gerenciador de certificado SSL podem ser modificadas com SoftLayer_Security_Certificate::editObject. Lembre-se de que certificados estarão disponíveis para modificação somente se não houver nenhum serviço associado a eles. Como com createObject, é necessário passar um SoftLayer_Security_Certificate templateObject, mas desta vez somente com as propriedades mudadas definidas.

$client->setInitParameter($certificateId);
$certificate = $client->getObject();
 
if ($certificate->associatedServiceCount > 0) {
    print("Please disassociate this certificate with all services before modifying");
    return;
}
 
$templateObject = new stdClass;
$templateObject>notes = ‘Let this be noted!;
 
try { 
    $result = $client->editObject($templateObject);
    print_r($result);
} catch (Exception $e) {
    print "Certificate modification failed: " . $e->getMessage();
}

Integração do balanceador de carga

Se tiver se inscrito para o serviço de transferência de SSL, não é inconcebível que associar seu novo certificado SSL criado ao balanceador de carga possa ser vantajoso. Após comprar um balanceador de carga com capacidade de transferência de SSL e incluir seu certificado, SoftLayer_Network_Application_Delivery_Controller_LoadBalancer_VirtualIpAddress::editObject será usado para atualizar o balanceador de carga com o novo ID de certificado. Isso é realizado preenchendo a propriedade securityCertificateId em seu templateObject.

$virtualIpAddressClient = SoftLayer_SoapClient::getClient('SoftLayer_Network_Application_Delivery_Controller_LoadBalancer_VirtualIpAddress', $virtualIpAddressId, $apiUsername,  $apiKey);
 
$templateObject = new stdClass;
$templateObject->securityCertificateId = $certificateId;
try { 
    $result = $virtualIpAddressClient->editObject($templateObject);
    print_r($result);
} catch (Exception $e) {
    print "Certificate association failed: " . $e->getMessage();
}

SoftLayer_Network_Application_Delivery_Controller_LoadBalancer_VirtualIpAddress::startSsl e SoftLayer_Network_Application_Delivery_Controller_LoadBalancer_VirtualIpAddress::stopSsl são usados para alternar o serviço de transferência de SSL e a propriedade booleana sslActiveFlag mostrará o estado atual do serviço de transferência. A função toggleSsl abaixo usará o estado atual de sslActiveFlag para determinar a chamada API apropriada. Se necessário, também é possível usar sslEnabledFlag para determinar se um VIP específico tem transferência de SSL disponível para uso.

function toggleSsl() {
    $virtualIpAddressClient = SoftLayer_SoapClient::getClient('SoftLayer_Network_Application_Delivery_Controller_LoadBalancer_VirtualIpAddress', $virtualIpAddressId, $apiUsername,  $apiKey);
    $action = ($virtualIpAddressClient::getObject()->sslActiveFlag) ? 'stopSsl' : 'startSsl';
 
    try { 
        $result = $virtualIpAddressClient->$action();
        print_r($result);
    } catch (Exception $e) {
        print "$action failed: " . $e->getMessage();
    }
}