我最近收到了用于haproxy SSL终止的签名证书。为了使haproxy使用此功能,我需要将jks文件转换为pem文件。首先,我将收到的cer文件转换为crt,因为我之前遇到过一个错误,即haproxy无法在pem文件中找到crt文件。对所有证书执行此操作:
$ openssl x509 -inform PEM -in <CER file here> -out <CRT output file>
然后,我将根证书,中间证书和服务证书导入已经具有私钥的密钥库:
keytool -importcert -file $CERT -alias $ALIAS -keystore test.jdk
然后我将jsk文件转换为p12文件,然后将其转换为pem文件:
$ keytool -importkeystore -srckeystore test.jks -destkeystore test.p12 -srcstoretype jks -deststoretype pkcs12
Enter destination keystore password:
Re-enter new password:
$ openssl pkcs12 -in test.p12 -out test.pem
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
这将生成具有以下格式的pem文件:
Bag Attributes
friendlyName:
localKeyID:
-----BEGIN ENCRYPTED PRIVATE KEY-----
-----END ENCRYPTED PRIVATE KEY-----
Bag Attributes
friendlyName:
subject=
issuer=
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
Bag Attributes
friendlyName:
subject=
issuer=
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
Bag Attributes
friendlyName:
subject=
issuer=
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
Bag Attributes
friendlyName:
localKeyID:
subject=
issuer=
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
显然,由于我不想在线共享这些信息,因此缺少很多信息;但是,结构几乎相同。
当我将此链接链接到haproxy时:
frontend https
maxconn 2000
bind 0.0.0.0:4000 ssl crt /home/user/config/cert/test.pem
[我用haproxy -d -f haproxy.cfg
运行它,要求输入PEM密码。我需要能够在服务器启动时自动启动haproxy,因此我无法每次运行它时都输入它。有什么方法可以删除密码短语,或者生成没有密码短语的pem文件?还是可以通过脚本提供?我用于在服务器启动时启动haproxy的脚本只是您在上面看到的命令,带有nohup来重定向输出。
[此外,当我使用haproxy所提供的一项服务时,Chrome仍然警告我CA不可信,就像我使用自签名证书一样。除了上面的内容之外,我还有什么需要做的吗?
您需要将密码保护的密钥复制到非密码保护的密钥。
openssl rsa -in test.pem -out test-password-less.key
要立即将PEM提供给HAProxy,您还需要证书。将两个文件都放在one PEM文件中以进行代理。
cat $CERT test-password-less.key > haproxy-test.pem