質問編集履歴

1

対応内容の追加

2019/12/13 13:07

投稿

sminier
sminier

スコア25

test CHANGED
File without changes
test CHANGED
@@ -51,3 +51,77 @@
51
51
 
52
52
 
53
53
  よろしくお願いいたします。
54
+
55
+
56
+
57
+ 12/13追記
58
+
59
+ パスワードはユーザーに入力させ、証明書ファイルは削除する想定で以下のプログラムを組みましたがうまくいきませんでした。
60
+
61
+
62
+
63
+ 初回はアプリに証明書をインストールし、次回以降は証明書ストアから取得するよう書きました。
64
+
65
+ 初回はログインが認証が成功しますが、次回以降のX509Storeから取り出した場合のみ、X509Certificate2.PrivateKeyがnullになってします。
66
+
67
+ ```C#
68
+
69
+ private getCert()
70
+
71
+ {
72
+
73
+ X509Certificate2Collection findResult;
74
+
75
+ using (X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
76
+
77
+ {
78
+
79
+ store.Open(OpenFlags.MaxAllowed);
80
+
81
+ findResult = store.Certificates.Find(X509FindType.FindBySubjectName, "subjectname", false);
82
+
83
+ store.Close();
84
+
85
+ }
86
+
87
+ X509Certificate2 cert;
88
+
89
+ if (findResult.Count == 1)
90
+
91
+ {
92
+
93
+ cert = findResult[0];
94
+
95
+ }
96
+
97
+ else
98
+
99
+ {
100
+
101
+ X509KeyStorageFlags flags = X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable;
102
+
103
+ Stream fis = Android.App.Application.Context.Assets.Open("certfilename.pfx");
104
+
105
+ cert = new X509Certificate2(GetByteArrayFromStream(fis), "password",flags);
106
+
107
+
108
+
109
+ using (X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser))
110
+
111
+ {
112
+
113
+ store.Open(OpenFlags.ReadWrite);
114
+
115
+ store.Add(cert);
116
+
117
+ store.Close();
118
+
119
+ }
120
+
121
+ }
122
+
123
+ return cert;
124
+
125
+ }
126
+
127
+ ```