我有一个组合的.pem文件,如下所示:
public class Phrases {
public Context context;
public static String[] categories = {"feeling", "home", "work", "medical", "food", "activity", "common", "emergency"};
private static Phrases phrases = null;
public Map<String, String[]> allPhrases = new HashMap<>();
private Phrases() {
}
public static Phrases getPhrases() {
if(phrases == null) {
phrases = new Phrases();
}
return phrases;
}
public void fetchAllPhrases(Context context) {
this.context = context;
Resources res = context.getResources();
allPhrases.put(categories[0], res.getStringArray(R.array.feeling));
allPhrases.put(categories[1], res.getStringArray(R.array.home));
allPhrases.put(categories[2], res.getStringArray(R.array.work));
allPhrases.put(categories[3], res.getStringArray(R.array.medical));
allPhrases.put(categories[4], res.getStringArray(R.array.food));
allPhrases.put(categories[5], res.getStringArray(R.array.activity));
allPhrases.put(categories[6], res.getStringArray(R.array.common));
allPhrases.put(categories[7], res.getStringArray(R.array.emergency));
// Log.v("PHRASES", Arrays.toString(allPhrases.toString()));
}
public Map<String, String[]> getAllPhrases() {
return allPhrases;
}
}
我认为这是ssl,key和ca的组合。我需要将其转换为truststore.jks和keystore.jks以用于我的服务。
public class CustomFragment extends Fragment {
private ArrayAdapter<String> adapter;
private ListView listView;
private FloatingActionButton addPhraseButton;
private TextView phraseTitleTextView;
private TextToSpeech textToSpeech;
private String[] phrases;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_custom, container, false);
//receive intent
String categories = getArguments().getString("categories");
Phrases phrasesObj = Phrases.getPhrases();
phrasesObj.fetchAllPhrases(view.getContext());
phrases = phrasesObj.getAllPhrases().get(categories);
phraseTitleTextView = view.findViewById(R.id.label_phrases_txtview);
addPhraseButton = view.findViewById(R.id.add_phrases_btn);
// setting local for text to speech
textToSpeech = new TextToSpeech(getActivity().getApplicationContext(), new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
textToSpeech.setLanguage(Locale.US);
}
});
//setting adapter and listview
adapter = new ArrayAdapter<String>(getContext(), R.layout.entry_item, R.id.phrase_textview, phrases);
listView = (ListView) view.findViewById(R.id.phrases_list);
listView.setAdapter(adapter);
listView.setItemsCanFocus(true);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> paren, View view, int position, long id) {
String text = phrases[position];
Toast.makeText(getContext(), text, Toast.LENGTH_LONG).show();
textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH,null, null);
}
});
return view;
}
}
但是抛出:
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
如果我尝试也发生以下情况:
openssl pkcs12 -export -out cert.pkcs12 -in cert
keytool -importcert -v -trustcacerts -alias eb-srv -file cert.pkcs12 -keystore truststore.jks
答案 0 :(得分:0)
您拥有的第一个命令(openssl)将为您创建PKCS12格式的密钥库。但是,对于信任库,您需要在链中分别添加每个证书。
当您具有以下格式的证书链时,通常位于此层次结构中。
-----BEGIN CERTIFICATE-----
User
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
Sub CA/CA
-----END CERTIFICATE-----
...
您应该添加到信任库中的是CA和Sub CA证书。因此,您需要将这些证书分成不同的文件,并为每个证书运行此命令。请注意,您不需要为用户证书执行此操作。
keytool -importcert -keystore truststore.jks -storepass [密码]-文件[certificate_file]
第一个命令将以PKCS12
格式创建密钥库。如果您需要其他格式,例如jks
,则可以运行以下命令:
keytool -importkeystore -srckeystore [pkcs12_keystore] -srcstorepass [pkcs12_password] -srcstoretype pkcs12 -destkeystore [jks_keystore_file] -deststorepass [jks_keystore_password] -deststoretype jks