如何在 Wamp Server 上生成 PEM encoded CSR 文件?
结论
生成 PEM 编码的 CSR 不需要安装 IIS,也与 WordPress 无关。Wamp Server 的 Apache 通常自带 OpenSSL,可以直接通过 openssl.exe 生成私钥和 CSR 文件。
需要提交的是 masterpass.csr 这类 CSR 文件。masterpass.key 是私钥,必须妥善保管,不能上传或发送给第三方。
使用 Wamp Server 自带的 OpenSSL
先在 Wamp Server 的 Apache 安装目录中找到 openssl.exe,常见位置如下:
C:\wamp64\bin\apache\apache2.4.x\bin\openssl.exe
请将 apache2.4.x 替换为实际安装的 Apache 版本目录。
打开“命令提示符”或 PowerShell,进入该目录:
cd /d C:\wamp64\bin\apache\apache2.4.x\bin
运行以下命令,确认 OpenSSL 可以正常使用:
openssl version
如果系统提示找不到 openssl,可以改用完整路径:
"C:\wamp64\bin\apache\apache2.4.x\bin\openssl.exe" version
生成私钥和 CSR
执行以下命令:
openssl req -new -newkey rsa:2048 -sha256 -nodes -keyout masterpass.key -out masterpass.csr
命令执行后会生成两个文件:
masterpass.key
masterpass.csr
参数含义如下:
-new:创建新的 CSR。-newkey rsa:2048:同时创建一把 2048 位 RSA 私钥。-sha256:使用 SHA-256 签名 CSR。-nodes:生成不受密码保护的私钥,方便应用程序自动读取。-keyout:指定私钥文件。-out:指定 CSR 文件。
随后,OpenSSL 会要求输入证书主题信息,例如:
Country Name (2 letter code) [AU]: CN
State or Province Name (full name) [Some-State]: Shanghai
Locality Name (eg, city) []: Shanghai
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Example Company
Organizational Unit Name (eg, section) []: IT
Common Name (e.g. server FQDN or YOUR name) []: www.example.com
Email Address []: admin@example.com
填写时请注意:
Country Name使用两个字母的国家或地区代码,例如CN。Organization Name填写真实的公司或组织名称。Common Name通常填写网站的完整域名,例如www.example.com。challenge password一般留空,除非支付平台明确要求填写。- 各字段的具体填写规则以 Masterpass 接入页面或当前支付服务商的证书要求为准。
如果对方指定了 RSA 位数、证书主题字段或签名算法,请优先按照对方的要求操作。
确认 CSR 是 PEM 格式
上述命令默认生成 PEM 编码的 CSR。使用文本编辑器打开 masterpass.csr,应能看到以下结构:
-----BEGIN CERTIFICATE REQUEST-----
MIIC...
-----END CERTIFICATE REQUEST-----
如果文件包含这两行标记,说明它是 PEM 编码的 Certificate Signing Request。
也可以使用 OpenSSL 检查 CSR:
openssl req -in masterpass.csr -noout -text -verify
CSR 有效时,命令会显示主题、公钥和签名算法等信息。
OpenSSL 找不到配置文件时的处理方法
部分 Wamp Server 环境在执行命令时可能出现以下错误:
Unable to load config info from ...
遇到这种情况,需要找到 Apache 目录中的 openssl.cnf,并通过 -config 明确指定其路径:
openssl req -new -newkey rsa:2048 -sha256 -nodes ^
-config "C:\wamp64\bin\apache\apache2.4.x\conf\openssl.cnf" ^
-keyout masterpass.key ^
-out masterpass.csr
openssl.cnf 的实际位置可能随 Wamp Server 和 Apache 版本而变化,可以在对应的 Apache 安装目录中查找。
另一种方法是临时设置配置文件环境变量:
set OPENSSL_CONF=C:\wamp64\bin\apache\apache2.4.x\conf\openssl.cnf
设置完成后,重新执行 CSR 生成命令。
已有私钥时只生成 CSR
如果已有一把需要继续使用的私钥,不要重新生成私钥。直接执行:
openssl req -new -sha256 -key masterpass.key -out masterpass.csr
证书签发后,服务端通常还要使用同一把私钥。如果重新生成私钥,新证书将无法与原私钥匹配。
可以比较公钥摘要,检查 CSR 与私钥是否匹配:
openssl pkey -in masterpass.key -pubout -outform DER | openssl sha256
openssl req -in masterpass.csr -pubkey -noout | openssl pkey -pubin -outform DER | openssl sha256
两条命令输出的 SHA-256 摘要应完全一致。
安全注意事项
masterpass.csr 可以提交给证书签发方或支付平台,masterpass.key 则绝不能提交。私钥一旦泄露,应立即废弃,并重新生成私钥、CSR 和证书。
示例命令使用了 -nodes,因此生成的私钥没有密码保护。请将私钥保存在访问受限的目录中,并确保无法通过 URL 从 Web 服务器下载。不要把它放入 WordPress 媒体目录、公开仓库或可公开访问的站点根目录。
如果支付平台允许应用在启动时输入私钥密码,也可以去掉 -nodes,生成加密私钥:
openssl req -new -newkey rsa:2048 -sha256 -keyout masterpass.key -out masterpass.csr
能否使用带密码的私钥,取决于 Masterpass SDK、支付插件或相关服务加载私钥的方式。使用前需要确认其配置要求。
备注:内容仅供参考。
