我有一个CA提供的jks密钥库,用于对JAR签名。但是,我希望通过HTTPS托管一些内部应用程序,因此需要创建一个SSL证书,以便通过HTTPS加密数据。然而,为了避免浏览器中的不可信证书/未知主机警告,我想知道是否可以使用用于签名JAR的jks密钥库也对我的CSR进行签名,以便创建SSL证书。
到目前为止,我已经设法做到了以下几点:
>
使用Java keytool生成证书和私钥对以创建JKS文件,即。
keytool-genkeypair-dname“CN=****,OU=****,O=****,L=****,ST=****,C=**”-有效性1000-别名mykeystore-keypass*****-keystore mykeystore.jks-storepass*****
*以上用实际值替换
使用Java键工具以步骤1中的JK作为输入创建CSR
keytool-certreq-alias mykeystore-file mykeystore_csr.pem-keypass*****-keystore mykeystore.jks-storepass*****
使用keytool将CA JKS密钥存储转换为PKCS
keytool-importkeystore-srcstoreType jks-srckeystore cakeystore.jks-srccalias caalias-srcstorePass*****-srckeypass*****-deststoreType pkcs12-destkeystore cakeystore.p12-destalias caalias-deststorePass*****-destkeypass*****
使用OpenSSL将CA PKCS转换为PEM
openssl pkcs12-输入cakeystore.p12-输出cakeystore.pem
使用OpenSSL将CA PEM转换为CRT
openssl x509-Outform der-In cakeystore.pem-Out cakeystore.crt
在这一点上,我希望能够使用cakeystore.pem和/或cakeystore.crt来签名mykeystore_csr.pem(来自上面的步骤2),然后将其转换回JKS,用作CA签名的SSL证书
这可能吗?任何想法或建议将非常感谢。
谢谢
吹毛求疵:颁发证书并不是签署CSR。如果您查看CSR的内容和cert的内容,它们是不同的--尽管cert中最重要的一个字段publickey,确实来自CSR,而主题名称可能也是如此。
若要有效地签署/颁发证书,必须有一个“中间CA”证书,其中basicconstraints
指定ca:true
和keyusage
(如果使用,通常是这样)至少指定keycertsign
,并匹配privateKey。查看如何防止假ssl证书链和security.sx链接。
OpenSSL在发布时实际上并不强制执行这些限制(尽管它主要是在验证时强制执行这些限制);使用PEM格式的cert和privatekey文件,您可以使用x509
子命令的非常基本的功能(带有-req-ca/-cakey
选项)或稍微完整的ca
子命令来颁发cert,这些子命令记录在您的系统或web上各自的手册页上(commands下编号为最新版本,man1下编号为development“master”)。
x509-req-ca*...
只读取CSR,格式化具有可选有效性长度和可选配置扩展的证书(参见man)并用CA密钥签名,将CA证书设置为父证书(始终为颁发者,可选AKID)。CA
通过更灵活的扩展选项来实现同样的功能,此外还维护一个简单的“数据库”(两个文件和一个目录),其中包含已颁发的证书,可用于其他与CA相关的功能,如颁发CRL和/或OCSP响应(同上)。
但是如果您(或者更确切地说您的任何系统)使用这样的证书,任何符合标准的对等方都将拒绝该证书,认为该证书是无效颁发的。根据对等方的不同,您有时可以禁用或覆盖证书检查,以便接受无效的证书,但如果您不希望安全,您不妨首先关闭SSL/TLS,以节省时间和精力。
如果所涉及的CA是您的组织内部的,只要您采取预防措施,防止对您的子CA的任何误用,从而危及组织的任何其他操作,他们可能愿意将证书签名(sub-CA)证书信任给您。如果这是一个公共CA,如Verisign或GoDaddy,向您颁发子CA证书意味着他们将整个业务交到您的手中,因为任何滥用您的子CA的行为都可能使他们停业;对于一个在网上需要陌生人基本建议的人来说,这是不会发生的。
<代码>java。安全KeyStore使用KeyStoreSpi实现来提供不同类型的KeyStore。基本OpenJDK支持JKS、JCEKS和PKCS12密钥库类型。前两个实现专有的Sun/Oracle格式,PKCS12是一个公共标准。 我知道JCEKS确实支持对称密钥,PKCS12则不支持。还有哪些实现(如Bouncy Castle)支持对称密钥?开发人员似乎想隐藏此类信息。E、 g.Boun
null null null 多谢!
在Google Play控制台中,您可以上传加密的应用程序签名密钥,将现有应用程序转换为使用Google managed应用程序签名:https://support.Google.com/googleplay/android-developer/answer/9842756?hl=en#zippy=%2Cexisting-apps 提供了3种不同的方法,它们都产生相同的加密密钥,但从不同类型的输入
我想在客户端设备上使用通过Ed25519生成的私钥对JWS(json web签名)进行签名。然后将这个签名发送到我的后端,并用公钥验证它。为了熟悉这个过程,我想尝试在node js中对JWS进行签名和验证 我的私钥和公钥都已生成,可以在base58中使用。这是我目前使用Ed25519私钥签署JWT的尝试: 密钥必须是KeyObject或CryptoKey类型之一。收到一个Uint8Array的实例
HTTP/REST-需要对代码/token/etc进行身份验证,以便将数据传递到keyvault,以便keyvault将使用密钥库中的密钥对数据进行签名。 Azure有很多文档介绍如何注册我的应用程序,在密钥库中为它创建凭据,然后通过OATH2对它进行身份验证(第一步是通过REST获得代码(然后是令牌?)),我一直被重定向登录。 我是不是漏掉了什么?我希望我的python脚本在无人值守的情况下运行
我只使用自签名证书进行测试。 问题: Q1.我想知道为什么我需要在步骤6中将服务器和客户端自己的证书添加到各自的信任库中。 2.创建x509证书 openssl req-x509-new-nodes-key diagserverca.key-sha256-days 1024-out diagserverca.pem 3.从私钥和公共证书创建PKCS12密钥存储库。 keytool-importke