我正在尝试使用pyopenssl生成ac自签名X509v3 CA证书.我想要添加扩展权限密钥标识符(AKID)与包含主题密钥标识符(SKID)的keyid.
但我的以下代码块不会将SKID复制到AKID而是抛出异常.
代码如下
import OpenSSL
key = OpenSSL.crypto.PKey()
key.generate_key(OpenSSL.crypto.TYPE_RSA, 2048)
ca = OpenSSL.crypto.X509()
ca.set_version(2)
ca.set_serial_number(1)
ca.get_subject().CN = "ca.example.com"
ca.gmtime_adj_notBefore(0)
ca.gmtime_adj_notAfter(24 * 60 * 60)
ca.set_issuer(ca.get_subject())
ca.set_pubkey(key)
ca.add_extensions([
OpenSSL.crypto.X509Extension("basicConstraints", True,
"CA:TRUE, pathlen:0"),
OpenSSL.crypto.X509Extension("keyUsage", True,
"keyCertSign, cRLSign"),
OpenSSL.crypto.X509Extension("subjectKeyIdentifier", False, "hash",
subject=ca),
OpenSSL.crypto.X509Extension("authorityKeyIdentifier", False, "keyid:always",issuer=ca)
])
ca.sign(key, "sha1")
open("MyCertificate.crt.bin", "wb").write(
OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_ASN1, ca))
Run Code Online (Sandbox Code Playgroud)
抛出的异常如下
Traceback (most recent call last):
File "C:\Documents and Settings\Administrator\Desktop\Certificate\certi.py", line 21, in <module>
OpenSSL.crypto.X509Extension("authorityKeyIdentifier", False, "keyid:always",issuer=ca)
Error: [('X509 V3 routines', 'V2I_AUTHORITY_KEYID', 'unable to get issuer keyid'), ('X509 V3 routines', …Run Code Online (Sandbox Code Playgroud) 使用SSL基础架构:
我们有一个有效的客户端/服务器设置,其中Android版本4.2和4.4的手机充当客户端,必须通过其自签名SSL证书验证服务器.
问题:
只要设备在尝试连接之前至少有一次Internet访问权限,服务器证书验证就会起作用.但是,如果执行恢复出厂设置且设备直接连接到没有Internet连接的专用网络,则证书验证将失败.
重现行为:
从技术上讲,设备不应该需要Internet访问来验证自签名证书.在进行任何SSL服务器验证之前,是否存在某种必须加载的黑名单?我可以阻止这种行为吗?
创建SSL上下文:
//Using a client certificate
String password = "clientpass";
KeyStore keyStore = KeyStore.getInstance("PKCS12");
InputStream is = context.getResources().openRawResource(R.raw.client);
keyStore.load(is, password.toCharArray());
is.close();
KeyManagerFactory kmf = KeyManagerFactory.getInstance("X509");
kmf.init(keyStore, password.toCharArray());
KeyManager[] keyManagers = kmf.getKeyManagers();
// Using self signed certificate
CertificateFactory cf = CertificateFactory.getInstance("X.509");
is = context.getResources().openRawResource(R.raw.cacert);
InputStream caInput = new BufferedInputStream(is);
Certificate ca;
try {
ca = cf.generateCertificate(caInput);
Log.i("CA","ca=" + ((X509Certificate) ca).getSubjectDN());
} finally {
caInput.close(); …Run Code Online (Sandbox Code Playgroud) 我试图在Ubuntu 14.04 上使用OpenSSL 创建一个自签名证书.当我输入命令时,我收到以下错误:openssl ca -in tempreq.pem -out server_crt.pem
Using configuration from /root/myCA/caconfig.cnf
**Error opening CA private key** ~/myCA/private/cakey.pem
139754719667872:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('~/myCA/private/cakey.pem','r')
139754719667872:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:
unable to load CA private key
Run Code Online (Sandbox Code Playgroud)
我已经验证该nano ~/myCA/private/cakey.pem命令会打开该cakey.pem文件,并且已启用此文件的读取权限.
任何帮助将不胜感激.谢谢!
在进行本地开发时,我需要通过 HTTPS 为 vue 应用程序提供服务。
该应用程序正在提供:npm run serve它运行:vue-cli-service serve
我试图创建一个vue.config.js文件并向其中添加以下内容:
module.exports = {
devServer: {
port: 8080,
https: true,
}
}
Run Code Online (Sandbox Code Playgroud)
这导致控制台错误在Chrome V75,如以下情况:GET https://192.168.0.71:8080/sockjs-node/info?t=1564339649757 net::ERR_CERT_AUTHORITY_INVALID我猜这是Chrome的说,设置时使用的证书https来true是不是从一个有效的CA(也许是某种形式的自签名的东西在后台要去?)
我怎样才能解决这个问题?通过“让我们加密”生成证书可能是要走的路吗?
另一方面,我还使用 生成了一个根 CA 私钥,openssl genrsa -des3 -out rootCA.key 2048并使用 生成了一个自签名证书openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem,但我不确定如何告诉vue-cli-service尝试使用这些。但是,如果自签名证书ERR_CERT_AUTHORITY_INVALID在 Chrome 中导致错误,那么追求这条路线就没有多大意义
是否可以使用自签名证书签署SAML 2.0帖子?我负责使用SAML 2.0与供应商实施新的SSO程序,我们试图确定我们是否可以使用自签名证书签署SAML帖子,或者我们是否需要购买一个.
如果我们可以使用自签名证书,服务提供商是否需要执行任何其他步骤来验证签名?我们正在创建SAML 2.0帖子作为身份提供商.
提前致谢.
我正在学习SSL,在这个过程中,我试图在.NET服务器和Java客户端之间创建SSL连接.我为此目的使用自签名证书.我不想在Java中使用标准密钥库,因此我创建了一个自定义密钥库并将其加载.
我使用以下步骤生成证书和要在.NET服务器端使用的pfx文件.
在Windows上使用以下命令生成cerficiate.
makecert -r -pe -sr"localhost" - $ individual -n"CN = localhost"-sv .pvk -r localhost.cer
将其转换为.pfx,以便我可以在.NET服务器应用程序上加载此证书.
将.cer文件导出为.pem(Base64格式).
获取.cer文件(上述证书的公共组件)并使用以下命令创建一个.jks文件(JavaKeyStore)以用作Java客户端.
keytool\-import\-v\-trustcacerts\-alias 0\-file <(openssl x509 -in localhost.pem)\ -keystore mystore.jks\-storetype JKS\-storepass ez24get
在Java客户端应用程序中加载此.jks并使用以下代码启动连接
Run Code Online (Sandbox Code Playgroud)FileInputStream fis = new FileInputStream("res/myjksstore.jks"); KeyStore trusted = KeyStore.getInstance("JKS"); trusted.load(fis, "ez24get".toCharArray()); TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); trustManagerFactory.init(trusted); SSLContext context = SSLContext.getInstance("SSL"); context.init(null, trustManagerFactory.getTrustManagers(), new SecureRandom()); Socket socket = context.getSocketFactory().createSocket("localhost", 443); String str = "abc123"; socket.getOutputStream().write(GeneralUtil.toByta(str.length())); socket.getOutputStream().write(str.getBytes()); socket.setKeepAlive(true);
但是当我尝试将数据写入套接字时,我在服务器端收到以下错误
System.ComponentModel.Win32Exception:客户端和服务器无法通信,因为它们没有通用的算法
我的服务器代码如下所示......
X509Certificate cert = new X509Certificate("localhost.pfx","abc123");
TcpListener listener = new TcpListener(IPAddress.Loopback,443); listener.Start(); …
我正在尝试让我的应用通过https与我的服务器通信.由于我不想付费以获得由受信任的CA签署的服务器证书,因此解决方案是使用自签名证书.
所以,我创建了我的caconfig.cnf如下:
[ ca ]
default_ca = CA_default # The default ca section
[ CA_default ]
dir = ./demoCA # top dir
database = $dir/index.txt # index file.
new_certs_dir = $dir/newcerts # new certs dir
certificate = $dir/cacert.pem # The CA cert
serial = $dir/serial # serial no file
private_key = $dir/private/cakey.pem # CA private key
RANDFILE = $dir/private/.rand # random number file
default_days = 365 # how long to certify for
default_crl_days = 30 # how long before next …Run Code Online (Sandbox Code Playgroud) 我使用自签名CA证书来签署其他证书.对于某些证书,我需要指定主题替代名称.我可以在请求生成期间指定它们(openssl req ...),我在.csr文件中看到它们.然后我使用CA证书进行签名
openssl x509 -req -extensions x509v3_config -days 365 -in ${name}.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out ${name}.crt
Run Code Online (Sandbox Code Playgroud)
以及openssl.cnf文件中的下一节:
[ x509 ]
x509_extensions = x509v3_config
[ x509v3_config ]
copy_extensions = copy
Run Code Online (Sandbox Code Playgroud)
但我在.crt文件中看不到SAN.
我知道有关命令的解决方案,openssl ca ...但我没有有效的[ca]部分,我不想复制/粘贴它而不深入了解它的作用.所以我希望存在另一个带openssl x509 ...命令的解决方案.
我正在使用C#.NET,需要在Windows证书库中安装一堆证书.
我需要检查哪些证书是根证书(即自签名),因此我可以将它们安装到"受信任的根证书"存储中.
我正在使用标准X509Certificate2课程.我现在的想法是,以检查是否Issuer和Subject是相同的.
我注意到,X509Certificate2有Issuer- IssuerName和Subject- SubjectName.
它是更好地对比Issuer到Subject,或者IssuerName到SubjectName?或者它真的不重要吗?
此外,这是一种可靠的方法还是我会更好地使用另一种方法?
我正在为开发服务器生成一个自签名证书,但我需要它才能被信任才能使用一些将使用该证书的工具.
这是我尝试过的:
openssl req -newkey rsa:2048 -x509 -nodes -keyout /etc/ssl/private/server.key -new -out /etc/ssl/certs/server.crt -reqexts v3_req -extensions v3_req -config /vagrant/openssl.san.conf -sha256 -days 1825
ln --symbolic /etc/ssl/certs/server.crt /etc/pki/ca-trust/source/anchors/server.crt
update-ca-trust extract
Run Code Online (Sandbox Code Playgroud)
在尝试运行update-ca-trust命令之后,我尝试使用grepping ca-bundle.crt文件获取内容,server.crt但它不在那里.
我也尝试过复制文件而不是制作符号链接,但这也不起作用.
证书是正确创建的,适用于Apache,但它会产生自签名错误:
Run Code Online (Sandbox Code Playgroud)[vagrant@localhost certs]$ curl --head https://localhost/ curl: (60) Issuer certificate is invalid. More details here: http://curl.haxx.se/docs/sslcerts.html
如何在服务器的命令行上信任我的自签名证书?