# openssl_spki_new

(PHP 5 >= 5.6.0, PHP 7)

openssl_spki_new — 生成一个新的签名公钥和挑战

### 说明

openssl_spki_new ( resource `&$privkey` , string `&$challenge` [, int `$algorithm` = 0 ] ) : string

使用指定的哈希算法生成一个新的签名公钥和挑战。

### 参数

`privkey`

  `privkey` 应该被设置为由openssl_pkey_new()函数预先生成(或者以其他方式从openssl_pkey函数集中获得)的私钥。该密钥的相应公共部分将用于签署CSR.

`challenge`

  与SPKAC有关的挑战。

`algorithm`

  摘要算法。参见 openssl_get_md_method()函数。

### 返回值

成功，返回一个签名的公钥和挑战，失败返回 NULL .

### 错误／异常

如果 `algorithm` 参数是一个未知的签名算法，将会抛出一个 `E_WARNING` 级的错误。

### 范例

Example #1 openssl_spki_new() 范例：

使用默认的摘要算法(MD5)生成一个新的SPKAC

    <?php
    $pkey = openssl_pkey_new('secret password');
    $spkac = openssl_spki_new($pkey, 'testing');

    if ($spkac !== NULL) {
        echo $spkac;
    } else {
        echo "SPKAC generation failed";
    }
    ?>

以上例程的输出类似于：

    MIICRzCCAS8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDM3V3sS4o4
    mB9dczziRnjGAmSp+JwPrHoYMAFGvDNmZGyiWfU586X4BKs++BAj7e/FsAfno0Hd
    hN9FwpCNFSox30L03nQvLYJE7f/WqigwBeMRT7Op/xvFks4sT70xP2HRYv4KqP9a
    WRcKU6cFH8VxhFhqM2txEIxZKdFLaL28yT7bEDmcglf4JLDdgNMb9rET1dkgtKE6
    dOaJHPGjf1uvnOH4YwkQr7n4sLUR3Kdbh0ZJAFuQVDZulo+LLzxBBkqJJcB6FhF+
    oXCdHTKZnqAhpWDz+NXYytAmevab6IYm5TWPWsJUv1YKJA5lg2mXbbloIZlN9Mgc
    i9fi03bdw+crAgMBAAEWB3Rlc3RpbmcwDQYJKoZIhvcNAQEEBQADggEBALyUvP/o
    pPSoWBlorFyZ2RnGwKf9qMpE0q2IJP7G3oDR4LyK/m933DUiZ+YnqThrH/CWb4Ek
    y5I3OCyl3S4wCuU1ibZZwDVwYShr5ELp0J9PEf7qMQZOhNsizoC7k+Czb2xB6hYW
    sKfsfTKm3cXBtH3fdgc/Z1Z7VSWnAzYo38snqm72NTf5yFRnrQdphNNXi+kn1zHA
    lxXRyFDXHOcYsOnwAWfyXFA4QDHQ0ezz0UoCY8gJXovcZb4GRYqOLUAsF2HcNboy
    29WN8VqE29sL9QxVZFlwMcqyoLcNnyw38GvNvAGqSvzzbnEFP2MAQXJVe0H0hdp/
    MML5G2iNVgNozAo=

### 参见

- openssl_spki_new()
- openssl_spki_export_challenge() - 导出与签名公钥和挑战相关的挑战字符串
- openssl_spki_export() - 通过签名公钥和挑战导出一个可用的PEM格式的公钥
- openssl_csr_new() - 生成一个 CSR
- openssl_csr_sign() - 用另一个证书签署 CSR (或者本身) 并且生成一个证书