通过 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
我目前正在开发一个用于自动获取和安装 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