openssl
允许通过单个命令生成自签名证书(-newkey
指令用于生成私钥,-x509
指令用于发放自签名证书而不是签名请求):
openssl req -x509 -newkey rsa:4096 \
-keyout my.key -passout pass:123456 -out my.crt \
-days 365 \
-subj /CN=localhost/O=home/C=US/emailAddress=me@mail.internal \
-addext "subjectAltName = DNS:localhost,DNS:web.internal,email:me@mail.internal" \
-addext keyUsage=digitalSignature -addext extendedKeyUsage=serverAuth
您可以分两步生成私钥并构建自签名证书:
openssl genrsa -out my.key -passout pass:123456 2048
openssl req -x509 \
-key my.key -passin pass:123456 -out my.csr \
-days 3650 \
-subj /CN=localhost/O=home/C=US/emailAddress=me@mail.internal \
-addext "subjectAltName = DNS:localhost,DNS:web.internal,email:me@mail.internal" \
-addext keyUsage=digitalSignature -addext extendedKeyUsage=serverAuth
查看生成的证书:
openssl x509 -text -noout -in my.crt
Java keytool
可以创建 PKCS#12 存储:
keytool -genkeypair -keystore my.p12 -alias master \
-storetype pkcs12 -keyalg RSA -keysize 2048 -validity 3650 \
-storepass 123456 \
-dname "CN=localhost,O=home,C=US" \
-ext 'san=dns:localhost,dns:web.internal,email:me@mail.internal'
导出自签名证书的方法如下:
keytool -exportcert -keystore my.p12 -file my.crt \
-alias master -rfc -storepass 123456
查看生成的证书:
keytool -printcert -file my.crt
GnuTLS
中的certtool
不支持通过命令行传递不同的属性。我不想去修改配置文件((
alternate_names
部分的配置文件,并使用-config
选项传递它。同时,在通用名称(CN)中放置DNS名称被IETF和CA/Browser论坛弃用(但不被禁止)。在CN中的任何DNS名称也必须存在于SAN中。无法避免使用SAN。请参见下面的答案。 - jww.com
,而是.org
。 - Yu Jiaao