通过 Plesk 在域上激活 SSL 证书 XML API

Activate SSL-Certificate on Domain via Plesk XML API

我目前正在开发一个用于自动获取和安装 SSL 证书的 Plesk 面板插件。 借助 Parallels 提供的非常强大的 XML API,我能够将证书安装到 Plesks SSL Cert-Pool。

也可以turn SSL on特定页面,但我绝对找不到激活特定证书(当然,已经添加到证书池中)的方法。

最简单的答案当然是"the API doesn't support it", 但使用此命令通过命令行实用程序很容易做到这一点:

/opt/psa/bin/subscription -u example.com -certificate-name my_cool_ssl_cert

关于the manual,

The Command-Line Interface (CLI) has the same functions as API RPC

这是相对明显的,因为它们在其他任何地方都具有相同的功能。

那么我错过了什么?有人做过吗?

如果无法通过 XML-API 激活特定的,许多调用将完全没有意义(可以安装 CERT,激活 ssl 但不激活它?真不敢相信。)

如果 answer/comment 给我指出正确的方向,我将不胜感激,在此先感谢!

这里是请求示例:

<packet>
    <webspace>
        <set>
            <filter>
                <id>34</id>
            </filter>
            <values>
                <hosting>
                    <vrt_hst>

                        <property>

                            <name>certificate_name</name>

                            <value>some_existed_certificate_name</value>

                        </property>

                    </vrt_hst>
                </hosting>
            </values>
        </set>  
    </webspace>
</packet>

主要规则是,如果在 CLI 中它是 "subscription" 设置,那么我们将转到 "Managing Subscriptions (Webspaces)" -> "Setting Subscription Parameters",并且我们始终必须检查 "Request Packet Structure"。从数据包结构我们猜测我们的 SSL 设置应该在托管部分并且有一个 link,所以我们去

http://download1.parallels.com/Plesk/PP12/12.0/Doc/en-US/online/plesk-api-rpc/39967.htm

但是我们看到 API 的这一部分没有完全记录,还有一些 "properties" 但显然不是全部。还有一张纸条

Note: To manage hosting settings, you should first retrieve a hosting settings descriptor, containing names of the settings. For details, refer to the Retrieving Descriptor of Hosting Settings section.

并且通过这个新的 link 我们可以找到如何检索我们找到 "certificate_name".

的托管属性的所有名称的列表

对于附加域或子域,您可以使用以下查询:

<packet>
    <site>
        <set>
            <filter>
                <id>3</id>
            </filter>
            <values>
                <hosting>
                    <vrt_hst>

                        <property>

                            <name>certificate_name</name>

                            <value>some_existed_certificate_name</value>

                        </property>

                    </vrt_hst>
                </hosting>
            </values>
        </set>  
    </site>
</packet>

我正在使用 REST API 创建子域并且工作得很好并且..它的方式更清晰的设置..您可能找不到足够的文档,但如果您尝试一些东西,您会发现它正在工作很好..我也认为更快,但这不是重点.. 所以这就是我安装 SSL、ftp 用户、PHP 版本等的方法。

$new_store = array(
  "name"              => newstore.sudbomain.com,
  "description"       => 'New store example',
  "hosting_type"      => 'virtual',

  'hosting_settings'  => array(
    "www_root"        => 'Clients/newstore.sudbomain.com,
    'ftp_login'       => $this->_ftp_user,
    'ftp_password'    => $this->_ftp_pass,
    'php'             => true,
    'php_handler_id'  => 'plesk-php80-fpm',
    'certificate_name'=> 'WildCardSSL'
  ),

  "parent_domain"       => array(
    "id"              => $this->_ng_id,
    "name"            => $this->_ng_name,
    "guid"            => $this->_ng_guid
  ),

  "ip_addresses"      => ["XXX.XXX.XXX.XXX"],
  "ipv4"              => ["XXX.XXX.XXX.XXX"],
  "ipv6"              => ["xxxx:xxx:xxx:xxxx::x"]

);

$body = json_encode($new_store, JSON_UNESCAPED_UNICODE);

$this->api_call('domains', $body, $response, $error);
// 'domains' is the endpoint
// $body is the json
// $response is the returned json response
// $error is errors returned from the curl command