东方通怎么生成P10证书请求?TongWeb SSL证书CSR制作方法
在东方通 TongWeb 等中间件上部署 SSL/TLS 证书时,CA 一般不会直接根据一个域名就签发证书,而是需要先提交 **CSR(Certificate Signing Request,证书签名请求)**。
很多证书申请平台把 CSR 文件称为 P10 请求,这里的 P10 指的是 PKCS#10 标准。P10 文件中包含申请者的主体信息、公钥以及申请者对这些内容的签名,但不包含私钥。
对于东方通环境,P10 的生成方式主要取决于证书和密钥算法:
- RSA/ECC 证书可以使用 OpenSSL 或 Java Keytool 生成;
- TongWeb 如果直接使用 Java 密钥库管理证书,使用
keytool生成 CSR 会更加顺手; - 如果申请国密 SM2 证书,则需要使用支持国密算法的工具链,不能简单套用普通 RSA CSR 的生成方法。
因此,生成 P10 之前,首先应该确定 证书算法、部署格式以及 CA 对 CSR 的具体要求。
P10请求里面有什么?
P10 本质上是一个 PKCS#10 Certification Request。
它主要包含三部分信息:
- Subject(主体信息)
例如:
CN=server.example.com
O=Example Company
C=CN
其中 CN 是传统 CSR 中常见的主体名称。
- 公钥信息
CSR 会包含由私钥对应生成的公钥,以及对应的公钥算法信息。
- 申请者签名
生成 CSR 时,申请者使用自己的私钥对 CSR 内容进行签名,用来证明申请者确实拥有与 CSR 中公钥对应的私钥。
因此可以简单理解为:
私钥
│
├──→ 公钥
│
└──→ 对CSR进行签名
│
▼
PKCS#10 / P10
│
▼
CA
│
▼
签发X.509证书
P10 可以交给 CA,但私钥不能交给 CA。
这一点在部署东方通 SSL 证书时尤其需要注意。证书申请完成后,CA 返回的是证书文件,私钥仍然应该保留在自己的服务器、密钥库或 HSM 中。
东方通怎么生成RSA证书的P10?
如果申请的是普通 RSA SSL 证书,可以使用 OpenSSL 生成。
首先生成 RSA 私钥:
openssl genrsa -out server.key 2048
然后根据私钥生成 CSR:
openssl req -new \
-key server.key \
-out request.p10 \
-sha256
执行后会要求填写 Subject 信息。
例如:
Country Name: CN
Organization Name: Example Company
Common Name: server.example.com
生成完成以后:
request.p10
就是可以提交给 CA 的 PKCS#10 请求文件。
如果需要自动化生成,也可以直接指定 Subject:
openssl req -new \
-key server.key \
-out request.p10 \
-sha256 \
-subj "/C=CN/O=Example Company/CN=server.example.com"
不过这里有一个容易忽略的问题:
CSR 中的 CN 不应该被理解为现代证书域名匹配的唯一依据。
现在公网 SSL 证书的域名匹配主要依赖 **SAN(Subject Alternative Name)**。如果一个证书需要保护多个域名,申请 CSR 时应根据 CA 要求正确处理 SAN。
例如:
openssl req -new \
-key server.key \
-out request.p10 \
-sha256 \
-subj "/C=CN/O=Example Company/CN=server.example.com" \
-addext "subjectAltName=DNS:server.example.com,DNS:www.example.com"
具体是否接受 CSR 中携带的 SAN,以及 CA 最终以 CSR 还是申请订单中的域名列表为准,要以对应 CA 的申请要求为准。
如果不确定 CSR 怎么制作,也可以先使用 TopSSL 的 CSR文件生成工具 检查需要填写哪些参数。
TongWeb可以用Keytool生成P10吗?
可以,而且对于已经采用 Java KeyStore(JKS)或其他 Java 密钥库管理证书的 TongWeb 环境,使用 keytool 生成密钥对和 CSR 往往比先用 OpenSSL 再转换更加方便。
首先创建密钥库并生成密钥对:
keytool -genkeypair \
-alias server \
-keyalg RSA \
-keysize 2048 \
-keystore keystore.jks \
-dname "CN=server.example.com,O=Example Company,C=CN"
然后生成 CSR:
keytool -certreq \
-alias server \
-keystore keystore.jks \
-file request.p10
输入密钥库密码后,就可以得到:
request.p10
将该文件提交给 CA,CA 审核通过后会返回签发的服务器证书和中间证书。
之后再将 CA 返回的证书导入原来的密钥库,使证书与原来的私钥建立对应关系。
这一点非常重要:
不能为了重新生成证书而随意重新生成一套私钥。
如果已经在 TongWeb 的 JKS 中生成了密钥对,那么申请 CSR、获得证书以及最终导入证书,都应该围绕同一个密钥对完成。
东方通申请证书时,P10需要包含SAN吗?
如果证书用于公网 HTTPS,建议按照 CA 的要求正确设置 SAN。
例如一个网站需要同时保护:
example.com
www.example.com
api.example.com
那么证书最终需要包含这些域名。
在现代 TLS 证书中,浏览器主要检查证书的 SAN 字段,而不是单纯依赖 CN。
因此,申请证书时不要只填写:
CN=example.com
然后认为 www.example.com 和 api.example.com 也会自动受到保护。
一个域名是否被证书覆盖,最终要看签发证书中的 SAN 列表。
如果使用 CA 平台申请多域名证书,部分平台会直接在订单页面填写域名,再根据订单信息完成证书签发,并不要求申请者自己在 CSR 中维护完整的 SAN。
所以具体怎么填,应该以所申请 CA 的 CSR 要求为准。
东方通怎么生成国密SM2证书P10?
如果 TongWeb 部署的是国密 SSL 证书,情况和 RSA 证书有所不同。
国密证书通常涉及:
SM2
SM3
SM4
其中:
- SM2:主要用于公钥密码和数字签名;
- SM3:用于摘要算法;
- SM4:用于对称加密。
因此,不能直接使用普通 OpenSSL 命令,把 RSA 私钥换成一个文件名就认为已经生成了国密 P10。
需要使用支持国密算法的密码工具链,例如符合实际环境要求的国密 OpenSSL、GmSSL、国密 JCE Provider 或 CA/设备厂商提供的工具。
例如某些 GmSSL 环境可以使用类似方式生成 SM2 密钥:
gmssl ecparam \
-genkey \
-name sm2p256v1 \
-out server.key
然后生成 CSR:
gmssl req \
-new \
-key server.key \
-out request.p10 \
-sm3
但这里需要特别注意:
不同版本的 GmSSL、国密 OpenSSL、JCE Provider 和东方通产品版本,其命令参数和密钥库支持方式可能存在差异。
所以国密项目不能简单按照网上某一条命令直接部署到生产环境。需要同时确认:
- TongWeb 的具体版本;
- 使用的软件密码模块;
- CA 对 CSR 编码和签名算法的要求;
- 证书是单证书还是国密双证书;
- 密钥存储方式;
- 是否使用密码机或 HSM。
如果项目涉及政务、金融等国密场景,还需要根据项目实际合规要求选择对应的 国密SSL证书。
P10是PEM格式还是DER格式?
P10 文件本身遵循 PKCS#10 标准,但文件编码可以不同。
比较常见的是:
PEM编码
文件通常可以直接用文本编辑器打开,并看到:
-----BEGIN CERTIFICATE REQUEST-----
MIIC...
...
-----END CERTIFICATE REQUEST-----
DER编码
DER 是二进制编码,直接打开一般看不到可读文本。
如果 CA 明确要求 DER 格式,可以使用 OpenSSL 转换:
openssl req \
-in request.p10 \
-out request.der \
-outform DER
反过来,如果 CA 要求 PEM,则需要按照 CA 要求输出 PEM 编码。
所以遇到“P10格式不正确”时,不能只看文件扩展名。
.p10、.csr 只是文件名后缀,真正决定文件结构的是里面的 PKCS#10 编码。
P10生成后怎么检查?
提交 CA 之前,建议先检查 CSR 内容。
OpenSSL 可以直接读取:
openssl req \
-in request.p10 \
-noout \
-text
重点检查:
Subject
Public Key Algorithm
Public-Key
Signature Algorithm
Subject Alternative Name
如果是 RSA CSR,需要确认使用的是预期的 RSA 公钥。
如果是国密 CSR,则需要进一步确认是否使用了 SM2 公钥以及 SM3 等符合项目要求的算法。
另外还要确认域名是否写错。
例如:
server.example.com
和:
www.example.com
是两个不同的 DNS 名称。
如果最终签发的证书没有包含实际访问域名,部署完成以后仍然会出现证书名称不匹配错误。
P10生成过程中有哪些容易出错的地方?
私钥丢失
CSR 本身不包含私钥,但 CA 签发的证书必须与原来的私钥匹配。
如果:
私钥A → 生成P10
然后又重新生成:
私钥B
再把 CA 根据 P10 签发的证书和私钥 B 配在一起,就会出现证书与私钥不匹配的问题。
CN和SAN填写错误
现在公网证书主要依靠 SAN 完成域名匹配,因此申请时应该重点确认 SAN。
尤其是多域名证书,不要只检查 CSR 的 CN。
把P10当成证书
P10 是证书申请请求,不是服务器证书。
流程应该是:
生成私钥
↓
生成P10 / CSR
↓
提交CA
↓
CA验证
↓
签发X.509证书
↓
导入TongWeb
不能直接把 P10 文件配置成服务器证书。
把私钥交给CA
这是不正确的做法。
CA 需要 CSR,不需要你的服务器私钥。
私钥应该由证书申请方自己生成并保管。
常见问题 FAQ
Q:东方通生成的P10和普通CSR有什么区别?
A:本质上没有区别。P10通常就是对 PKCS#10 Certificate Signing Request 的简称,而 CSR 是更常用的名称。只要文件符合 PKCS#10 标准,.p10 和 .csr 更多只是文件命名上的区别。
Q:P10里面有没有私钥?
A:没有。P10包含公钥、主体信息以及申请者签名,但不会包含对应的私钥。私钥应该保存在生成 CSR 的服务器、Java 密钥库或硬件密码设备中。
Q:TongWeb使用JKS时,还需要用OpenSSL生成P10吗?
A:不一定。如果密钥对本身就在 Java KeyStore 中,可以直接使用 keytool -certreq 生成 CSR/P10,这样可以避免后续把 OpenSSL 私钥、证书与 Java 密钥库重新对应。
Q:国密SM2证书能直接用普通OpenSSL生成P10吗?
A:不能简单这么处理。需要确认所使用的 OpenSSL/GmSSL 版本以及国密 Provider 是否支持 SM2/SM3,并同时满足 CA 对国密 CSR 的具体要求。国密项目还需要考虑 TongWeb 版本和密码设备的兼容性。
Q:P10提交给CA后,私钥应该怎么处理?
A:私钥继续保存在自己的环境中,不需要提交给 CA。CA 根据 P10 中的公钥签发证书,最终需要将 CA 返回的证书与原来的私钥配对后部署到 TongWeb。
总结
东方通部署 SSL 证书时,P10 本质上是 PKCS#10 格式的 CSR,用于向 CA 提交主体信息和公钥。RSA/ECC 场景可以使用 OpenSSL 或 Java Keytool 生成;TongWeb 使用 Java 密钥库时,直接通过 keytool -certreq 更方便。国密项目则需要使用支持 SM2/SM3 的国密工具链,并确认 CA、TongWeb 版本及密码设备之间的兼容性。生成 P10 最重要的不是文件后缀,而是密钥对、域名 SAN、签名算法和编码格式都符合 CA 要求,同时确保私钥始终由申请方自行保管。



京公网安备11010502031690号
网站经营企业工商营业执照
















