Java - PKCS11 和 MSKeyStore

2023-12-07

我正在尝试使用 MS-KeyStore 中的不同证书签署一个字符串。 但是,我知道有从 MS-Keystore 中的令牌导入的密钥。 所以,我的问题是 - 如果我通过密钥库并尝试使用引用 pkcs11 的证书进行签名,我会弹出一个窗口,要求输入 pkcs11 密码。 如何检查证书是否来自我的令牌?

提前致谢!!!

这是我现在的代码:

  String alias;
    byte[] data = "test".getBytes();
    char[] pin = "pass".toCharArray();

    try {


        KeyStore ks = KeyStore.getInstance("Windows-MY");
        ks.load(null, pin);
        System.out.println("Provider: "+ks.getProvider());
        System.out.println("KS size: " + ks.size());

        Enumeration enumeration = ks.aliases();

        while (enumeration.hasMoreElements()) {
            alias = (String) enumeration.nextElement();

            PrivateKey privateKey = (PrivateKey) ks.getKey(alias, null);
            Certificate certificate = ks.getCertificate(alias);

            Provider provider = ks.getProvider();
            Signature signature = Signature.getInstance("SHA1withRSA", provider);
            try {
                signature.initSign(privateKey);
                signature.update(data);

                byte[] signedSignature = signature.sign();
                System.out.println("\tGenerated signature for " + alias);

                signature.initVerify(certificate);
                signature.update(data);
                if (signature.verify(signedSignature)) {
                    System.out.println("\tSignature verifified for " + alias);
                } else {
                    System.out.println("\tCould not verify signature for " + alias);
                }
            } catch (Exception ex) {
                System.out.println("\tError for " + alias);
            }

        }

    } catch (KeyStoreException e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    } catch (CertificateException e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    } catch (FileNotFoundException e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    } catch (IOException e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    } catch (UnrecoverableKeyException e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    }

恐怕您无法可靠地判断证书的来源,至少在 MS CAPI 提供程序的 Java 级别上无法判断。但这是设计的一部分 - MS CAPI 或多或少打算封装和隐藏证书/密钥的来源。

判断您的密钥/证书来自 PKCS#11 设备的安全方法是使用SUN PKCS#11 提供商。但是,这样做的缺点是您需要静态指定本机 PKCS#11 库的路径(在 java.security 文件中,您可以在其中静态配置提供程序)或动态请求它作为用户输入。

如果在您的情况下使用 PKCS#11 提供程序太麻烦,我建议实现一个证书选择对话框来过滤合适的证书。将 MSCAPI 限制为源自 PKCS#11 的证书不会立即提高安全性 - 您的用户可能有充分的理由安装了其他证书/密钥(通常以 PKCS#12 文件的形式)。您应该只检查(并帮助用户根据此标准过滤证书)最终选择的证书/密钥是否符合您的标准:正确的密钥使用(例如数字签名)、健全的扩展密钥使用、可接受或已知的策略存在于证书等

在欧盟,我们正在慢慢朝着“安全签名创建设备上的合格证书”的概念发展。这意味着此类设备(例如智能卡)上附带的证书将包含特殊策略,CA 禁止将这些策略用于任何其他证书(例如软件证书)。因此,这将有效地允许您确保证书源自安全的硬件设备。您可以检查所涉及的证书是否支持此功能。这欧洲电信标准协会文件列出您必须查找的相应 OID。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java - PKCS11 和 MSKeyStore 的相关文章

  • 是什么决定了从 lambda 创建哪个函数式接口?

    请考虑这个例子 import java util function Consumer public class Example public static void main String args Example example new
  • 这个函数(for循环)空间复杂度是O(1)还是O(n)?

    public void check 10 for string i list Integer a hashtable get i if a gt 10 hashtable remove i 这是 O 1 还是 O n 我猜测 O n 但不是
  • OpenCV 中的 Gabor 内核参数

    我必须在我的应用程序中使用 Gabor 过滤器 但我不知道这个 OpenCV 方法参数值 我想对虹膜进行编码 启动 Gabor 过滤器并获取特征 我想对 12 组 Gabor 参数值执行此操作 然后我想计算 Hamming Dystans
  • 运行具有外部依赖项的 Scala 脚本

    我在 Users joe scala lib 下有以下 jar commons codec 1 4 jar httpclient 4 1 1 jar httpcore 4 1 jar commons logging 1 1 1 jar ht
  • 按第一列排序二维数组,然后按第二列排序

    int arrs 1 100 11 22 1 11 2 12 Arrays sort arrs a b gt a 0 b 0 上面的数组已排序为 1 100 1 11 2 12 11 22 我希望它们按以下方式排序a 0 b 0 首先 如果
  • 如何在不超过最大值的情况下增加变量?

    我正在为学校开发一个简单的视频游戏程序 我创建了一个方法 如果调用该方法 玩家将获得 15 点生命值 我必须将生命值保持在最大值 100 并且由于我目前的编程能力有限 我正在做这样的事情 public void getHealed if h
  • Cassandra java驱动程序协议版本和连接限制不匹配

    我使用的java驱动程序版本 2 1 4卡桑德拉版本 dsc cassandra 2 1 10cql 的输出给出以下内容 cqlsh 5 0 1 Cassandra 2 1 10 CQL spec 3 2 1 Native protocol
  • 如何安全地解决这个 Java 上下文类加载器问题?

    我的数百名用户中只有一位在启动我的 Java 桌面应用程序时遇到问题 他只有大约三分之一的时间开始 另外三分之二的时间在启动时抛出 NullPointerException Exception in thread AWT EventQueu
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • 在 Netbeans 8 上配置 JBoss EAP 的问题

    我已经下载了 JBoss EAP 7 并正在 Netbeans 8 上配置它 我已经到达向导 实例属性 其中要求从选择框中选择 域 当我打开选择框时 它是空的 没有什么可以选择的 因此 完成 按钮也处于非活动状态 这使得无法完成配置 我通过
  • 具有 java XSLT 扩展的数组

    我正在尝试使用 java 在 XSLT 扩展中使用数组 我收到以下错误 Caused by java lang ClassCastException org apache xpath objects XObject cannot be ca
  • 将 SignedHash 插入 PDF 中以进行外部签名过程 -workingSample

    遵循电子书第 4 3 3 节 PDF 文档的数字签名 https jira nuxeo com secure attachment 49931 digitalsignatures20130304 pdf 我正在尝试创建一个工作示例 其中 客
  • 如何知道抛出了哪个异常

    我正在对我们的代码库进行审查 有很多这样的陈述 try doSomething catch Exception e 但我想要一种方法来知道 doSomething 抛出了哪个异常 在 doSomething 的实现中没有 throw 语句
  • 测试弱引用

    在 Java 中测试弱引用的正确方法是什么 我最初的想法是执行以下操作 public class WeakReferenceTest public class Target private String value public Targe
  • Java中的Object类是什么?

    什么是或什么类型private Object obj Object http download oracle com javase 6 docs api java lang Object html是Java继承层次结构中每个类的最终祖先 从
  • 具有特定参数的 Spring AOP 切入点

    我需要创建一个我觉得很难描述的方面 所以让我指出一下想法 com x y 包 或任何子包 中的任何方法 一个方法参数是接口 javax portlet PortletRequest 的实现 该方法中可能有更多参数 它们可以是任何顺序 我需要
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • hashcode 的默认实现为以相同方式构造的对象返回不同的值

    我在这里编写一个示例代码 public class Test private int i private int j public Test TODO Auto generated constructor stub public Test
  • ServletContainer 类未找到异常

    我无法再编译我的球衣项目 并且出现以下异常 GRAVE Servlet Project API threw load exception java lang ClassNotFoundException com sun jersey spi
  • 如何在 JFreeChart 中设置多个系列的线条粗细?

    我创建了很多图表 在他们每个人中我都需要打电话 renderer setSeriesStroke i new BasicStroke 2 0f 对于每个系列 renderer is chart getXYPlot getRenderer 我

随机推荐

  • 为什么我不能创建一个大小由全局变量确定的数组?

    为什么数组a没有被全局变量初始化size include
  • jqGrid:子网格不填充数据

    我有一个子网格 当您单击 Cheese 旁边的 号时 会触发 ajax 查询 并且我会看到子网格列名称 但实际数据不会填充到子网格中 无论我尝试扩展哪个网格 问题都会发生 但 奶酪 示例如下所示 您可以在屏幕截图中 FireBug 输出的底
  • 在 ASP.NET MVC 中匹配跨多个“/”的 URL 参数

    在 ASP NET MVC 中匹配跨多个 的 URL 参数的最佳方法是什么 Eg URL http example com controller action p1 p2 p3 p4 我只想将一个参数传递给操作方法 上面是 p1 p2 p3
  • scapy 数据包操作和原始 pkt.time

    我有 python scapy 和平代码将我的数据存储到数据库中 IP src 和 dst 端口 我用它来进行一些统计 在某些数据包上 我正在执行一些操作 更改目标端口 然后将它们发送回接口 问题是我正在操作的这个数据包具有与原始数据包不同
  • 如何在nodejs中使用getRandomValues()?

    我正在使用 Javascript 生成wireguard 密钥对 但它是面向浏览器的 因此我删除了窗口对象 并且还有一个阻止创建私钥的问题 问题是这行代码我无法在nodejs中运行 function generatePresharedKey
  • BigQuery 试运行会返回什么?

    BigQuery 文档说 在表的较小分区而不是一个大表上测试查询 如果使用 API 请验证查询的语法并使用 dryRun 标志获取数据处理统计信息 但他们也表示 对于 dryRun 如果设置 则不会实际运行查询 有效的查询将返回空响应 而无
  • 调用 GBrowserIsCompatible() 时 Google 地图 API JavaScript 错误

    我在以下行中收到错误 if GBrowserIsCompatible 这是我的代码仍然无法工作
  • 尝试将 SELECT SCOPE_IDENTITY() 作为 C# 变量

    我正在一个表中插入一行 然后想要获取该新 ID 以便我可以将其添加到存储电子邮件地址的另一个变量中 var db Database Open myDB var insertCommand1 INSERT INTO myDB FirstNam
  • 寻找指南针 2 度之间最接近的差异 - Javascript

    我基本上是想找出指南针上两个点相距多少度 例如 如果一个人面朝 270 度 而指南针为 280 度 那么这两点之间就有 10 度 如果相对于第一个标题 它在左侧 我还想要一个负数 在右侧则为正数 例如 当 to 标题为 350 和 020
  • 防止选择和复制

    我想在 html 页面中不活动选择和复制文本 当我使用 Javascript 且处于非活动状态时 右键单击用户可以使用 Ctrl V 你不能 甚至不要尝试 不要惹恼你的用户 如果您将其公开发布在网络上 则可以复制 从技术上讲 用户一看到它就
  • 如何使用 Spring AOP 和 SPring boot 进行日志记录

    我使用与本示例教程中相同的 LoggingAspect 类https www javaguides net 2019 05 spring boot spring aop logging example tutorial html 但是当我调
  • 困惑为什么 PyGame 显示黑屏

    因此 在我决定问这个问题之前 我做了一些研究 看看我的问题是什么 并发现了这一点 代码仅在 Pygame 窗口中产生黑屏然而 这并不是那么有帮助 因为我没有遇到与此人相同的问题 我确信我的 PyGame 没有过时或类似的东西 因为我的代码的
  • 添加程序集引用还需要引用基础程序集

    我创建了一个程序集 该程序集有一个子类 该子类派生自另一个程序集中定义的父类 当我添加对子项的引用时 Visual Studio 还要求将引用添加到父项 为什么会这样 如何在不丢失任何功能的情况下防止它 你所描述的情况是部分可能的 您可以消
  • 渐变动画 - 减速和加速

    我正在制作一个动画CAGradientLayer 类似于苹果在 iPhone 主屏幕上使用 滑动解锁 动画的方式 然而我的动画有点不同 它在某些点会减慢和加速 到目前为止 我的代码是一个渐变动画并且可以工作 但是我如何让它在不同的点减慢 加
  • IBM Worklight - 无法使用现有别名注册到事件源回调。该别名已用于事件源

    我正在使用 IBM Worklight 6 0 0 并在 iOS 7 设备上进行测试 我有以下js错误 Cannot register to event source callback with an existing alias myPu
  • [function.fopen]:打开流失败:HTTP 请求失败! HTTP/1.1 401 未经授权

    function fopen 打开流失败 HTTP 请求失败 HTTP 1 1 401 未经授权 我定期收到此错误 即它仅在随机时间发生 任何想法会导致此错误 我已检查我的 php ini 并将allow url fopen 设置为 tru
  • 将 SQL 数据读取器数据加载到 DataTable 时遇到问题

    string query select from cfo daily trans hist try using SqlConnection connection new SqlConnection cnnString SqlCommand
  • c# 如何使用实时图表反转 Y 轴

    我试图简单地反转 Y 轴 以便该图向上而不是向下 从 6 开始 一直到 1 这是关于倒置图的用户文档 https lvcharts net App examples v1 wpf Inverted 20Series 这是我用来构建图表的示例
  • NodeJS 中的空合并赋值运算符 (??=)

    我正在尝试在 NodeJS 中使用 Nullish 合并赋值运算符 这可能吗 const setValue object path value gt const indices first 0 second 1 keys path repl
  • Java - PKCS11 和 MSKeyStore

    我正在尝试使用 MS KeyStore 中的不同证书签署一个字符串 但是 我知道有从 MS Keystore 中的令牌导入的密钥 所以 我的问题是 如果我通过密钥库并尝试使用引用 pkcs11 的证书进行签名 我会弹出一个窗口 要求输入 p