«

使用OpenSSL制作自签名证书

srdf 发布于 阅读:163


第一步:使用openssl genpkey -out localhost.key指令生成服务器证书的私钥

使用以下指令生成localhost.key私钥:

openssl genpkey -out localhost.key -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -pkeyopt rsa_keygen_primes:3

使用-pass pass:password 方法输入密码时,不得包含特殊字符。如果一定要包含,请使用-pass stdin方式手动输入。

备注

  1. 对于 rsa_keygen_primes:numprimes 选项中,如果使用这个选项,那么必须遵循以下规则:最大值不得超过5。当bits小于1024位时,该值=2;小于4096位时=3,小于8192位时=4。建议rsa_keygen_bits:numbers = 4096,因此rsa_keygen_primes:numprimes = 3。相关的定义在GitHub查看。
  2. 也可以不添加密码。因为xampp可能不支持这一方法。
  3. 如果要使用-pass pass:value方法输入密码,那么禁止在其中包含特殊字符。
  4. 如果primes大于5,会报出以下错误:
genpkey: Error generating RSA key
E8160000:error:020000A5:rsa routines:rsa_multiprime_keygen:key prime num invalid:crypto\rsa\rsa_gen.c:102:

第二步:使用openssl req生成服务器证书请求

使用以下指令生成localhost.csr请求:

openssl req -new -key localhost.key -out localhost.csr

也可以加上-pubkey,将公钥输出到localhost.csr。这一选项不能单独使用。

第三步:使用openssl req -x509方式生成服务器证书

代码如下:

openssl req -x509 -in localhost.csr -days 7 -key localhost.key

其中,证书的密钥是localhost.key,对应的证书请求时localhost.csr,有效期为七天。

但是,这一指令存在缺陷,因为未使用-out选项,系统会默认采用标准出书,直接将结果打印在文件上。因此,要想制成存储在硬盘上的crt文件,就要新增一个-out选项,后面跟上文件名。

正确的指令如下:

openssl req -x509 -in localhost.csr -days 7 -key localhost.key -passin pass:FAxRKrEJSOcbC4XG -out localhost.crt
# 或者
openssl req -x509 -in localhost.csr -days 7 -key localhost.key -out localhost.crt # 对应无密码的密钥。

因为没有使用-copy_extensions选项,因此忽略了请求里的扩展信息。

第四步:部署OpenSSL证书

按照以下格式在httpd-ssl.conf文件中配置基本的信息:

Listen 443
<VirtualHost *:443>
    DocumentRoot "D:/xampp/htdocs"
    ServerName localhost:443
    ServerAdmin admin@admin.com
    SSLEngine on
    SSLCertificateFile "YourCertifiteRoot/localhost.crt"
    SSLCertificateKeyFile "YourCertifiteRoot/localhost.key"
</VirtualHost>

然后在httpd.conf文件里将LoadModule ssl_module modules/mod_ssl.so启用(本示例中在177行附近)。

设置完成后,重启apache。如果Ports(s)部分只有443或80字样,就需要同时检查httpd.conf和httpd-ssl.conf两个文件,确保一个是Listen 80,另一个是Listen 443,这样就能同时监听80端口和443端口。


扫描二维码,在手机上阅读
取消
微信二维码
微信二维码
支付宝二维码